반응형
기본적인 튜닝 절차
- SQL문 실행결과 & 현황 파악
- 결과 및 소요시간 확인
- 조인/서브쿼리 구조
- 동등/범위 조건…
- 가시적
- 테이블의 데이터 건수
- SELECT덜 컬럼 분석
- 조건절 컬럼 분석
- 그루핑/정렬 컬럼
- 비가시적
- 실행계획
- 인덱스 현황
- 데이터 변경 추이
- 업무적 특징
- 튜닝 방향 판단 & 개선/적용
1. SQL 문 단순 수정으로 착한 쿼리 만들기
- 기본 키를 변형하는 나쁜 SQL 문
- 기본 키를 변형하지 않는 조회 조건을 넣어야한다.
- 사용하지 않는 함수를 포함하는 나쁜 SQ문
- 불필요한 ifnull 함수를 사용해서 인덱스를 활용 못하는 경우
- 형변환으로 인덱스를 활용하지 못하는 나쁜 SQL 문
- 문자열을 숫자 취급해서 인덱스를 활용 못하는 경우
- 열을 결합하여 사용하는 나쁜 SQL 문
- 열을 분리하지 않고 합쳐서 인덱스를 활용 못하는 경우
- 습관적으로 중복을 제거하는 나쁜 SQL문
- Distinct는 정렬작업을 포함하므로, 중복을 제거하는 작업이 필요한지 고민해봐야 한다.
- 다수 쿼리를 UNION 연산자로만 합치는 나쁜 SQL 문
- DISTINCT가 사용되는 UNION보다는 UNION ALL을 사용
- 인덱스 고려 없이 열을 사용하는 나쁜 SQL 문
- 인덱스 컬럼 순서대로 그루핑
- 엉뚱한 인덱스를 사용하는 나쁜 SQL 문
- 인덱스 범위를 줄일 수 있는 컬럼으로 where에 사용
- 동등 조건으로 인덱스를 사용하는 나쁜 SQ문
- 인덱스 자동 사용이 비효율적이라면 IGNORE INDEX (인덱스) 힌트를 사용할 수 있다
- 범위 조건으로 인덱스를 사용하는 나쁜 SQL 문
- 인덱스 스캔으로 랜덤 액세스의 부하가 발생하도록 하기보다 테이블 풀 스캔 방식을 고정적으로 설정하도록 하는 것이 효율적일 수 있음
2. 테이블 조인 설정 변경으로 착한 쿼리 만들기
- 작은 테이블이 먼저 조인에 참여하는 나쁜 SQL 문
- STRAIGHT_JOIN을 활용해 데이터가 큰 테이블에 where절이 먼저 걸릴 수 있도록 한다
- 메인 테이블에 계속 의존하는 나쁜 SQL문
- 메인 테이블을 여러번 사용하지 않도록 Group by 와 having 절을 적절히 사용한다
- 불필요한 조인을 수행하는 나쁜 SQL문
- 존재여부만 확인이 필요한 경우, EXISTS 를 활용한다.
References
Book. 업무에 바로 쓰는 SQL 튜닝
반응형
'Data Analysis > SQL Tuning' 카테고리의 다른 글
[SQL 레벨업] 2장. SQL 기초 (0) | 2023.12.19 |
---|---|
[SQL 레벨업] 1장. DBMS 아키텍쳐 (0) | 2023.12.13 |
[SQL 튜닝] 실행계획 (0) | 2023.11.13 |
[SQL 튜닝] 기본개념 (0) | 2023.11.13 |