SQL 튜닝/SQL 문 단순 수정
[SQL 튜닝] 사용하지 않는 함수를 포함하는 나쁜 SQL 문
Johnny's
2023. 7. 10. 22:58
반응형
SMALL
사용하지 않는 함수를 포함하는 나쁜 SQL 문
현황 분석
| 튜닝 전 실행 계획 |
사원 테이블에서 성별 기준으로 몇 명의 사원이 있는지 출력하는 쿼리
EXPLAIN
SELECT IFNULL(성별, 'NO DATA') AS 성별, COUNT(1) 건수
FROM 사원
GROUP BY IFNULL(성별, 'NO DATA');
- 사원 테이블 컬럼 수 : 300024 (약 30만건)
- SQL문 결과 : 총 2건의 결과 출력, 115ms 소요
M(남) - 179973, F(여) - 120051
- 성별의 값이 NULL 이면 NO DATA 출력 (IFNULL 처리)
- Key 항목 : I_성별_성 인덱스로 나타나므로 인덱스 풀 스캔 방식으로 수행
- Extra 항목 : Using temporary 이므로 임시테이블을 생성
튜닝 수행
사원 테이블의 성별 열에는 Null 값이 존재하지 않고, M(남)과 F(여)라는 데이터만 저장
DESC 사원;
- 성별 열에는 NOT NULL 속성 설정
- NULL : NO → Null 값이 될 수 없다고 해석
- IFNULL() 함수를 처리하려고 DB 내부적으로 별도의 임시 테이블을 만들어서 Null 값의 여부를 검사할 필요 없음
- 성별 열에는 Null 값이 존재할 수 없음 → Null 값의 입력을 방어하는 불필요한 로직은 튜닝 대상
튜닝 결과
| 튜닝 후 실행 계획 |
IFNULL() 함수 제거, 성별 열만 그대로 사용하여 튜닝
EXPLAIN
SELECT 성별, COUNT(1) 건수
FROM 사원
GROUP BY 성별;
115ms → 46.8ms (속도 개선)
Key : I_성별_성 (인덱스 풀 스캔 방식 수행)
Extra : Using Index (임시 테이블 없이 인덱스만 사용하여 데이터 추출)
* 참고
반응형
LIST