인터넷에서 벤치 마크를 찾지 못해서 벤치 마크를 스스로 결정했습니다.
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
그런 다음 간단한 SELECT, LIKE를 사용하여 SELECT 및 정렬 (ORDER BY를 사용하여 SELECT)을 벤치마킹하기 위해 다음 저장 프로 시저를 만들었습니다.
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를 사용하는 benchmark_simple_select () : 9957 ms utf8_unicode_ci를 사용하는
benchmark_simple_select () : 10271 ms utf8_unicode_ci를
사용하는이 벤치 마크에서 utf8_unicode_ci를 사용하는 벤치 마크는 utf8_general_ci보다 3.2 % 느립니다.
utf8_general_ci를 사용하는 benchmark_select_like () : 11441ms utf8_unicode_ci를 사용하는
benchmark_select_like () : 12811ms utf8_unicode_ci를
사용하는이 벤치 마크에서 utf8_unicode_ci를 사용하는 벤치 마크는 utf8_general_ci보다 12 % 느립니다.
utf8_general_ci가있는 benchmark_order_by () : 11944ms utf8_unicode_ci가있는
benchmark_order_by () : 12887ms utf8_unicode_ci를
사용하는이 벤치 마크에서 utf8_unicode_ci를 사용하는 벤치 마크는 utf8_general_ci보다 7.9 % 느립니다.