İnternette hiçbir ölçüt bulamadım, bu yüzden kendim için ölçütler yapmaya karar verdim.
500000 satırlı çok basit bir tablo oluşturdum:
CREATE TABLE test(
ID INT(11) DEFAULT NULL,
Description VARCHAR(20) DEFAULT NULL
)
ENGINE = INNODB
CHARACTER SET utf8
COLLATE utf8_general_ci;
Sonra bu saklı yordamı çalıştırarak rastgele verilerle doldurdu:
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
Sonra basit SELECT, LIKE ile SELECT ve sıralama (ORDER BY ile SELECT) karşılaştırması için aşağıdaki saklı yordamları oluşturdum:
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
Yukarıdaki saklı yordamlarda utf8_general_ci harmanlama kullanılır, ancak elbette testler sırasında hem utf8_general_ci hem de utf8_unicode_ci kullandım.
Her saklı yordamı her harmanlama için 5 kez (utf8_general_ci için 5 kez ve utf8_unicode_ci için 5 kez) çağırdı ve sonra ortalama değerleri hesapladı.
Sonuçlar burada:
utf8_unicode_ci ile benchmark_simple_select () : 9957 ms utf8_unicode_ci ile benchmark_simple_select (): 10271 ms
utf8_unicode_ci kullanan bu ölçütte utf8_unicode_ci kullanan bu kıyaslama değerinde utf8_unicode_ci% 3,2 daha yavaştır.
utf8_general_ci ile benchmark_select_like (): 11441 ms
utf8_unicode_ci ile benchmark_select_like (): 12811 ms
utf8_unicode_ci kullanan bu ölçütte utf8_unicode_ci kullanan bu testte% 12 daha utf8_general_ci daha yavaştır.
utf8_general_ci ile benchmark_order_by (): 11944 ms
utf8_unicode_ci ile benchmark_order_by (): 12887 ms
utf8_unicode_ci kullanan bu ölçütte utf8_unicode_ci kullanan bu kıyaslama değerinde utf8_general_ci% 7,9 daha yavaştır.