❌ 문제의 SQL문
SELECT *
FROM 사원
WHERE CONCAT(성별, ' ', 성) = 'M Radwan';
📉 이게 왜 문제일까? 실행계획을 살펴보자.
type -> 테이블 풀스캔
약 30만개를 스캔하였고, 실제 데이터는 102개를 가져왔다.
+----+-------------+--------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+--------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| 1 | SIMPLE | 사원 | NULL | ALL | NULL | NULL | NULL | NULL | 296854 | 100 | Using where |
+----+-------------+--------+------------+------+---------------+------+---------+------+--------+----------+-------------+
'성' 과 '성별', '성별 + 성' 에 인덱스가 걸려있지만, 인덱스를 제대로 활용하지 못한 모습이다.
⭕ 튜닝 후 SQL문
열과 열을 결합했기 때문에 인덱스를 타지 못했고, CONCAT을 사용하지 않고 WHERE문으로만 같은 결과를 가져오도록 한다.
SELECT *
FROM 사원
WHERE 성별 = 'M'
AND 성 = 'Radwan';
📉 실행 계획 확인
(성별, 성) 인덱스를 사용하였고, 기존에 rows 약 29만개 데이터 접근했던 것이 102개의 데이터에 접근해서 102개의 데이터만 가져온 것을 확인할 수 있다.
+----+-------------+--------+------------+------+---------------+--------------+---------+-------------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+--------+------------+------+---------------+--------------+---------+-------------+------+----------+-------+
| 1 | SIMPLE | 사원 | NULL | ref | I_성별_성 | I_성별_성 | 51 | const,const | 102 | 100 | NULL |
+----+-------------+--------+------------+------+---------------+--------------+---------+-------------+------+----------+-------+
🎯 정리
열에 인덱스가 걸려있어도 결국 CONCAT과 같이 결합하거나 변형해서 사용한다면 인덱스를 잘 활용하고 있는지 꼭 확인해보자.
[스터디 교재]
https://product.kyobobook.co.kr/detail/S000001810409
'스터디 > 업무에 바로 쓰이는 SQL 튜닝' 카테고리의 다른 글
[업무에 바로 쓰는 SQL 튜닝] 4-5 습관적으로 중복을 제거하는 나쁜 SQL 문 (0) | 2024.10.03 |
---|---|
[업무에 바로 쓰는 SQL 튜닝] 4-3 형변환으로 인덱스를 활용하지 못하는 나쁜 SQL 문 (0) | 2024.09.27 |
[업무에 바로 쓰는 SQL 튜닝] 4-2 사용하지 않는 함수를 포함하는 나쁜 SQL문 (0) | 2024.09.27 |
[업무에 바로 쓰는 SQL 튜닝] 4-1 기본키를 변형하는 나쁜 SQL문 (1) | 2024.09.24 |
[업무에 바로쓰는 SQL 튜닝] 3장. 실행 계획 수행[작성중] (1) | 2024.09.13 |