반응형
SMALL
범위 조건으로 인덱스를 사용하는 나쁜 SQL 문
현황 분석
| 튜닝 전 실행 계획 |
입사일자가 1994년 1월 1일부터 2000년 12월 31일까지인 사원들의 이름과 성을 출력하는 쿼리
EXPLAIN
SELECT 이름, 성
FROM 사원
WHERE 입사일자 BETWEEN STR_TO_DATE('1994-01-01', '%Y-%m-%d')
AND STR_TO_DATE('2000-12-31', '%Y-%m-%d');
- SQL문 결과 : 총 48,875건의 결과 출력, 116 ms 소요
튜닝 수행
SELECT COUNT(1) FROM 사원;
- 사원 테이블 : 총 데이터 300,024건 (튜닝 전 SQL 문의 결과 건수 48,875 건 - 약 17%)
- 인덱스를 사용하는 것이 효율적일지, 아니면 인덱스 없이 테이블에 바로 접근하는 방식이 효율적일지 확인
- 입사일자 열 기준으로 매번 수 년에 걸친 데이터를 조회하는 경우가 잦다면, 인덱스 스캔으로 랜덤 액세스의 부하가 발행하도록 하기 보다는 테이블 풀 스캔 방식을 고정적으로 설정하는 것이 나음
튜닝 결과
| 튜닝 후 실행 계획 |
입사일자 열로 생성한 인덱스를 사용하지 않게 의도적으로 인덱스 열을 변형한 쿼리
EXPLAIN
SELECT 이름, 성
FROM 사원
WHERE YEAR(입사일자) BETWEEN '1994' AND '2000';
type 항목 : ALL 로 수행 → 테이블 풀 스캔 방식으로 데이터 접근
인덱스 없이 테이블에 직접 접근하며 한 번에 다수의 페이지에 접근하므로 더 효율적
* 참고
반응형
LIST
'SQL 튜닝 > SQL 문 단순 수정' 카테고리의 다른 글
[SQL 튜닝] 동등 조건으로 인덱스를 사용하는 나쁜 SQL 문 (0) | 2023.07.17 |
---|---|
[SQL 튜닝] 엉뚱한 인덱스를 사용하는 나쁜 SQL 문 (0) | 2023.07.16 |
[SQL 튜닝] 인덱스 고려 없이 열을 사용하는 나쁜 SQL 문 (0) | 2023.07.15 |
[SQL 튜닝] 다수 쿼리를 UNION 연산자로만 합치는 나쁜 SQL 문 (0) | 2023.07.14 |
[SQL 튜닝] 습관적으로 중복을 제거하는 나쁜 SQL 문 (0) | 2023.07.13 |
댓글