खैर, मुझे इंटरनेट में कोई बेंचमार्क नहीं मिला, इसलिए मैंने खुद ही बेंचमार्क बनाने का फैसला किया।
मैंने 500000 पंक्तियों के साथ एक बहुत ही सरल तालिका बनाई:
CREATE TABLE test(
ID INT(11) DEFAULT NULL,
Description VARCHAR(20) DEFAULT NULL
)
ENGINE = INNODB
CHARACTER SET utf8
COLLATE utf8_general_ci;
फिर मैंने इसे संग्रहीत प्रक्रिया चलाकर यादृच्छिक डेटा से भर दिया:
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
तब मैंने निम्न संग्रहित प्रक्रियाओं को सरल चयन, बेंचमार्क के साथ चयन करने और क्रमबद्ध करने (ORD के साथ चयन) का निर्माण किया:
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
Utf8_general_ci कोलेशन से ऊपर संग्रहीत प्रक्रियाओं में उपयोग किया जाता है, लेकिन निश्चित रूप से परीक्षणों के दौरान मैंने utf8_general_ci और utf8_unicode_ci दोनों का उपयोग किया।
मैंने प्रत्येक जमा के लिए 5 बार प्रत्येक संग्रहीत प्रक्रिया को बुलाया (utf8_general_ci के लिए 5 बार और utf8_unicode_ci के लिए 5 बार) और फिर औसत मानों की गणना की।
यहाँ परिणाम हैं:
utmark8_general_ci के साथ
बेंचमार्क_ simple_select (): 9957 ms बेंचमार्क_ simple_select () utf8_unicode_ci के साथ: 10271 ms
इस बेंचमार्क में ut88_unicode_ci का उपयोग utf8_general_ci से 3.2% कम है।
utf8_general_ci के साथ
बेंचमार्क_सेलेक्ट_इल (): utf8_unicode_ci: 12811 एमएस के साथ 11441 एमएस बेंचमार्क_सेलेक्ट_इसी ()
utf8_general_ci 12% से utf8_general_ci की तुलना में धीमी है।
utmark8_general_ci के साथ बेंचमार्क_ऑर्डर_बाइ (): 11944 एमएस
बेंचमार्क_ऑर्डर_बाय () utf8_unicode_ci के साथ: 12887 एमएस
इस बेंचमार्क में utf8_unicode_ci का उपयोग कर utf8_general_ci की तुलना में 7.9% धीमा है।