https://github.com/7IEON/SQLtune
위 레포의 데이터를 통해 SQL 성능 튜닝을 학습 / 진행하였다.
1. 튜닝 준비하기
SELECT COUNT(1) FROM 테이블명;
통해서 각 테이블의 데이터 건수와 값 확인 가능
SHOW INDEX FROM 테이블명;
통해서 인덱스 확인 가능
- PRIMARY KEY : 기본키
- unique index (고유 인덱스): UI 접두사 사용해 생성
- non unique index (비고유 인덱스): I 접두사 사용해 생성
SQL 튜닝 절차
- SQL 문 구성 요소 살펴보고 SQL 문 실행 결과와 구조 함께 확인해봐야 함
- SQL문의 구성 요소는 크게 두 가지.
- 가시적: 테이블 현황, 조건절, 그루핑 열, 정렬되는 열, SELECT 절의 열
- 비가시적: 실행 계획, 인덱스 현황, 조건절 열들의 데이터 분포, 적재 속도, 업무 특성 등
- SQL 문 실행결과 및 현황 파악 (결과 및 소요시간, 조인/서브쿼리 구조, 동등/범위 조건)
- 가시적, 비가시적 나눠서 생각
- 튜닝 방향 판단 & 개선 및 적용
2. SQL문 단순 수정으로 착한 쿼리 만들기
사용하지 않는 구문 / 불필요한 구문 있는지 확인 후 SQL 튜닝 수행
문제가 되는 쿼리 기본적인 실행 계획 / 소요시간 확인 후 튜닝 수행구문 에서 쿼리 튜닝의 방향성 유추하거나 테스트 수행 → 튜닝된 SQL문을 튜닝 결과 단계에서 검증
(1) 기본키를 변형하는 나쁜 SQL 문
SELECT * FROM 사원 WHERE SUBSTRING(사원번호,1,4)=1100 AND LENGTH(사원번호)=5
![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/0d230db3-3e4f-42c7-b963-1c8cdd4d76a9/2c03d6d6-7519-46b1-9c5c-b6b5466cb8c9/Untitled.png)
튜닝 전 실행 계획
![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/0d230db3-3e4f-42c7-b963-1c8cdd4d76a9/c54f6061-94db-4074-b9bc-49a02a5e7b59/Untitled.png)