ঠিক আছে, আমি ইন্টারনেটে কোনও মানদণ্ড খুঁজে পাইনি, তাই আমি নিজেই বঞ্চমার্ক করার সিদ্ধান্ত নিয়েছি।
আমি 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
তারপরে আমি সাধারণ নির্বাচন করুন, পছন্দ ও পছন্দ অনুসারে বাছাইয়ের জন্য নিম্নোক্ত সঞ্চিত প্রক্রিয়াগুলি তৈরি করেছি (অর্ডার দিয়ে নির্বাচন করুন):
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 বার) এবং তারপরে গড় মানগুলি গণনা করি।
ফলাফল এখানে:
utf8_general_ci সহ
বেঞ্চমার্ক_সিম্পল_স लेक्ट (): 9957 এমএস বেঞ্চমার্ক_সিম্পল_স लेक्ट () সাথে utf8_unicode_ci: 10271 এমএস
এই বেঞ্চমার্কে utf8_unicode_ci ব্যবহার করে 3.2% অবধি utf8_general_ci থেকে ধীর হয়।
utf8_general_ci: 11441 এমএস
বেঞ্চমার্ক_সিলিট_লাইক () সাথে utf8_unicode_ci: 12811 এমএস
ব্যবহার করে এই বেঞ্চমার্কে utf8_unicode_ci ব্যবহার 12% দ্বারা utf8_general_ci এর চেয়ে ধীর হয়।
utf8_general_ci সহ বেঞ্চমার্ক_র্ডার_বি (): 11944 এমএস
বেঞ্চমার্ক_র্ডার_বি () দিয়ে utf8_unicode_ci: 12887 এমএস
এই বেঞ্চমার্কে utf8_unicode_ci ব্যবহার করে utf8_general_ci এর চেয়ে 7.9% কম ধীর হয়।