실무적인 SQL 튜닝 절차
기본 키를 변형하는 나쁜 SQL 문
현황 분석
| 튜닝 전 실행 계획 |
EXPLAIN
SELECT * FROM 사원
WHERE SUBSTRING(사원번호,1,4) =1100
AND LENGTH(사원번호)=5;
- 사원 테이블 컬럼 수 : 300024 (약 30만건)
- SQL문 결과 : 총 10건의 결과 출력, 100ms 소요
- type 항목 : ALL → 테이블 풀 스캔 방식
- 인덱스를 사용하지 않고 테이블에 바로 접근함
- 필요한 범위에만 접근하는 대신 처음부터 끝까지 스캔하기 때문에 비효율적임
현황 분석
기본 키와 인덱스 현황 확인
기본 키(PRIMARY) : 사원번호
인덱스 : I_입사일자, I_성별_성(성별, 성) (3개)
SHOW index FROM 사원;
튜닝 전 SQL문에서는 사원번호 열을 조건문(WHERE 절)으로 작성 → 기본 키를 통해 빠르게 접근 가능
SUBSTRING(사원번호,1,4), LENGTH(사원번호) 와 같이 가공하여 작성해서 테이블 풀 스캔으로 수행 됨
가공된 사원번호 열을 변경하여 기본 키를 사용할 수 있도록 조정 (튜닝)
튜닝 결과
기본 키를 별다른 변형 없이 작성, BETWEEN 또는 비교 연산자(>=, <=, >, <) 사용
EXPLAIN
SELECT * FROM 사원
WHERE 사원번호 BETWEEN 11000 AND 11009;
EXPLAIN
SELECT * FROM 사원
WHERE 사원번호 >= 11000 AND 사원번호 <= 11009;
100ms → 0.9ms (속도 개선)
type : range
Key : PRIMARY
사용하지 않는 함수를 포함하는 나쁜 SQL 문
현황 분석
| 튜닝 전 실행 계획 |
EXPLAIN
SELECT * FROM 사원
WHERE SUBSTRING(사원번호,1,4) =1100
AND LENGTH(사원번호)=5;
- 사원 테이블 컬럼 수 : 300024 (약 30만건)
- SQL문 결과 : 총 10건의 결과 출력, 100ms 소요
- type 항목 : ALL → 테이블 풀 스캔 방식
- 인덱스를 사용하지 않고 테이블에 바로 접근함
- 필요한 범위에만 접근하는 대신 처음부터 끝까지 스캔하기 때문에 비효율적임
튜닝 수행
기본 키와 인덱스 현황 확인
기본 키(PRIMARY) : 사원번호
인덱스 : I_입사일자, I_성별_성(성별, 성) (3개)
SHOW index FROM 사원;
튜닝 전 SQL문에서는 사원번호 열을 조건문(WHERE 절)으로 작성 → 기본 키를 통해 빠르게 접근 가능
SUBSTRING(사원번호,1,4), LENGTH(사원번호) 와 같이 가공하여 작성해서 테이블 풀 스캔으로 수행 됨
가공된 사원번호 열을 변경하여 기본 키를 사용할 수 있도록 조정 (튜닝)
튜닝 결과
| 튜닝 후 실행 계획 |
기본 키를 별다른 변형 없이 작성, BETWEEN 또는 비교 연산자(>=, <=, >, <) 사용
EXPLAIN
SELECT * FROM 사원
WHERE 사원번호 BETWEEN 11000 AND 11009;
EXPLAIN
SELECT * FROM 사원
WHERE 사원번호 >= 11000 AND 사원번호 <= 11009;
100ms → 0.9ms (속도 개선)
type : range
Key : PRIMARY
* 참고
'SQL 튜닝 > SQL 문 단순 수정' 카테고리의 다른 글
[SQL 튜닝] 다수 쿼리를 UNION 연산자로만 합치는 나쁜 SQL 문 (0) | 2023.07.14 |
---|---|
[SQL 튜닝] 습관적으로 중복을 제거하는 나쁜 SQL 문 (0) | 2023.07.13 |
[SQL 튜닝] 열을 결합하여 사용하는 나쁜 SQL 문 (0) | 2023.07.12 |
[SQL 튜닝] 형변환으로 인덱스를 활용하지 못하는 나쁜 SQL 문 (0) | 2023.07.11 |
[SQL 튜닝] 사용하지 않는 함수를 포함하는 나쁜 SQL 문 (0) | 2023.07.10 |
댓글