-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path03_runtime_compare.sql
More file actions
85 lines (73 loc) · 2.13 KB
/
Copy path03_runtime_compare.sql
File metadata and controls
85 lines (73 loc) · 2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
-- Run after: USE <your_database>;
-- 목적: 반복 실행으로 LIKE vs FULLTEXT 평균 시간(ms) 비교
SET @kw_like := '%에어맥스%';
SET @kw_ft := '+에어맥스*';
SET @loops := 30;
DROP TEMPORARY TABLE IF EXISTS bench_result;
CREATE TEMPORARY TABLE bench_result (
run_no INT,
query_type VARCHAR(20),
elapsed_ms DECIMAL(10,3)
);
DROP PROCEDURE IF EXISTS run_search_bench;
DELIMITER //
CREATE PROCEDURE run_search_bench(IN in_loops INT)
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE t0 DATETIME(6);
DECLARE t1 DATETIME(6);
DECLARE t2 DATETIME(6);
DECLARE t3 DATETIME(6);
WHILE i <= in_loops DO
-- LIKE timing
SET t0 = NOW(6);
SELECT SQL_NO_CACHE p.product_id
FROM product p
WHERE p.name LIKE @kw_like
ORDER BY p.product_id DESC
LIMIT 20;
SET t1 = NOW(6);
INSERT INTO bench_result(run_no, query_type, elapsed_ms)
VALUES (
i,
'LIKE',
TIMESTAMPDIFF(MICROSECOND, t0, t1) / 1000.0
);
-- FULLTEXT timing
SET t2 = NOW(6);
SELECT SQL_NO_CACHE p.product_id
FROM product p
WHERE MATCH(p.name) AGAINST(@kw_ft IN BOOLEAN MODE)
ORDER BY p.product_id DESC
LIMIT 20;
SET t3 = NOW(6);
INSERT INTO bench_result(run_no, query_type, elapsed_ms)
VALUES (
i,
'FULLTEXT',
TIMESTAMPDIFF(MICROSECOND, t2, t3) / 1000.0
);
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
CALL run_search_bench(@loops);
DROP PROCEDURE IF EXISTS run_search_bench;
-- 요약 통계
SELECT
query_type,
ROUND(AVG(elapsed_ms), 3) AS avg_ms,
ROUND(MIN(elapsed_ms), 3) AS min_ms,
ROUND(MAX(elapsed_ms), 3) AS max_ms
FROM bench_result
GROUP BY query_type;
-- 개선율 계산
SELECT
ROUND(
(
(SELECT AVG(elapsed_ms) FROM bench_result WHERE query_type = 'LIKE') -
(SELECT AVG(elapsed_ms) FROM bench_result WHERE query_type = 'FULLTEXT')
) /
(SELECT AVG(elapsed_ms) FROM bench_result WHERE query_type = 'LIKE') * 100,
2
) AS improvement_percent;