SQL 튜닝/SQL 문 단순 수정
[SQL 튜닝] 열을 결합하여 사용하는 나쁜 SQL 문
Johnny's
2023. 7. 12. 22:00
반응형
SMALL
열을 결합하여 사용하는 나쁜 SQL 문
현황 분석
| 튜닝 전 실행 계획 |
사원 테이블에서 성별의 값과 1칸의 공백(space), 성의 값을 모두 결합한 결과가 'M Radwan'인 데이터를 조회하는 쿼리
EXPLAIN
SELECT *
FROM 사원
WHERE CONCAT(성별, ' ',성) ='M Radwan';
- 사원 테이블 컬럼 수 : 300024 (약 30만 건)
- SQL문 결과 : 총 102건의 결과 출력, 103ms 소요
- 사원 테이블은 CONCAT(성별,' ',성) = 'M Radwan' 조건절로 데이터에 접근하지만, 테이블 풀 스캔
- type 항목 : ALL → 데이터를 처음부터 끝까지 스캔하므로 비효율적임
튜닝 수행
- 총 300,024건 중에 102건의 데이터를 조회하는 쿼리문
- 사원 테이블
. 기본 키 : 사원번호 열
. I_입사일자 인덱스 : 입사일자 열
. I_성별_성 인덱스 : 성별 열+성 열
- WHERE 절에서 성별 열과 성 열로 구성된 I_성별_성 인덱스를 사용할 수 있고, 조건문도 동등 조건(=)이므로 인덱스를 활용하여 데이터를 빠르게 조회할 수 있음
튜닝 결과
| 튜닝 후 실행 계획 |
사원 테이블에서 성별이 M(남)이고, 성이 'Radwan인' 사원 정보를 조회
EXPLAIN
SELECT *
FROM 사원
WHERE 성별 = 'M' AND 성 = 'Radwan';
concat() 함수로 인덱스 열들을 가공(튜닝 전) → 각 열을 분리하고 열의 변형을 제거(튜닝 후)
103ms → 1.2ms (속도 개선)
I_성별_성 인덱스를 사용해서 사원 테이블에 접근 → 102건의 데이터에만 접근 (액세스 범위가 줄어들었음)
* 참고
반응형
LIST