Chà, tôi không tìm thấy bất kỳ điểm chuẩn nào trên Internet, vì vậy tôi quyết định tự mình thực hiện các điểm chuẩn.
Tôi đã tạo một bảng rất đơn giản với 500000 hàng:
CREATE TABLE test(
ID INT(11) DEFAULT NULL,
Description VARCHAR(20) DEFAULT NULL
)
ENGINE = INNODB
CHARACTER SET utf8
COLLATE utf8_general_ci;
Sau đó, tôi điền nó với dữ liệu ngẫu nhiên bằng cách chạy thủ tục được lưu trữ này:
CREATE PROCEDURE randomizer()
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE random CHAR(20) ;
theloop: loop
SET random = CONV(FLOOR(RAND() * 99999999999999), 20, 36);
INSERT INTO test VALUES (i+1, random);
SET i=i+1;
IF i = 500000 THEN
LEAVE theloop;
END IF;
END LOOP theloop;
END
Sau đó, tôi đã tạo các quy trình được lưu trữ sau đây để điểm chuẩn CHỌN đơn giản, CHỌN với THÍCH và sắp xếp (CHỌN với ĐẶT HÀNG B) NG):
CREATE benchmark_simple_select()
BEGIN
DECLARE i INT DEFAULT 0;
theloop: loop
SELECT * FROM test WHERE Description = 'test' COLLATE utf8_general_ci;
SET i = i + 1;
IF i = 30 THEN
LEAVE theloop;
END IF;
END LOOP theloop;
END
CREATE PROCEDURE benchmark_select_like()
BEGIN
DECLARE i INT DEFAULT 0;
theloop: loop
SELECT * FROM test WHERE Description LIKE '%test' COLLATE utf8_general_ci;
SET i = i + 1;
IF i = 30 THEN
LEAVE theloop;
END IF;
END LOOP theloop;
END
CREATE PROCEDURE benchmark_order_by()
BEGIN
DECLARE i INT DEFAULT 0;
theloop: loop
SELECT * FROM test WHERE ID > FLOOR(1 + RAND() * (400000 - 1)) ORDER BY Description COLLATE utf8_general_ci LIMIT 1000;
SET i = i + 1;
IF i = 10 THEN
LEAVE theloop;
END IF;
END LOOP theloop;
END
Trong các thủ tục được lưu trữ ở trên, đối chiếu utf8_general_ci được sử dụng, nhưng tất nhiên trong các thử nghiệm tôi đã sử dụng cả utf8_general_ci và utf8_unicode_ci.
Tôi đã gọi mỗi thủ tục được lưu trữ 5 lần cho mỗi đối chiếu (5 lần cho utf8_general_ci và 5 lần cho utf8_unicode_ci) và sau đó tính các giá trị trung bình.
Đây là kết quả:
điểm
chuẩn_simple_select () với utf8_general_ci: 9957 ms điểm chuẩn_simple_select () với utf8_unicode_ci: 10271 ms
Trong điểm chuẩn này sử dụng utf8_unicode_ci chậm hơn utf8_general_ci bằng 3,2%.
điểm
chuẩn_elect_like () với utf8_general_ci: 11441 ms Bench_select_like () với utf8_unicode_ci: 12811 ms
Trong điểm chuẩn này sử dụng utf8_unicode_ci chậm hơn utf8_general_ci 12%.
điểm
chuẩn_order_by () với utf8_general_ci: 11944 ms điểm chuẩn_order_by () với utf8_unicode_ci: 12887 ms
Trong điểm chuẩn này sử dụng utf8_unicode_ci chậm hơn utf8_general_ci khoảng 7,9%.