본문 바로가기
SQL 튜닝/SQL 문 단순 수정

[SQL 튜닝] 열을 결합하여 사용하는 나쁜 SQL 문

by Johnny's 2023. 7. 12.

열을 결합하여 사용하는 나쁜 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건의 데이터에만 접근 (액세스 범위가 줄어들었음)

 

* 참고

- 업무에 바로쓰는 SQL 튜닝(도서) - 4장 악성 SQL 튜닝으로 초보자 탈출하기

댓글