1. 🔍 SQL 튜닝의 목적과 기본 원칙
- 목적: SQL 실행 속도 개선이 아니라 불필요한 자원 낭비 제거
- 대상: CPU 사용 과다, I/O 발생량 과다, 공유 실패, 병목 지점
- 원칙:
- 실행계획 해석 → 병목 파악
- 조건절 구조 개선 → 인덱스 활용 유도
- 튜닝 전후 비교는 수치로 증명 (COST, GETS, READS 등)
2. 📊 실행계획 해석의 기본
항목 |
의미 |
주의점 |
Id |
실행 순서 아님, 계층 구조 |
하위 Operation부터 실행 |
Operation |
처리 방식 |
FULL SCAN, INDEX SCAN 등 |
Rows |
예상 리턴 행 수 |
통계 기반 예측 |
Cost |
옵티마이저 판단 기준 |
상대적 비교 수치 |
Access/Filter |
인덱스 조건 vs 후처리 조건 |
Access만 인덱스 활용 |
3. 🔧 조건절 튜닝 전략
문제 유형 |
개선 전략 |
TO_CHAR(HIREDATE) |
함수 제거 → BETWEEN 날짜 범위 사용 |
LIKE '%전자%' |
구조 변경 or Full Text Index |
OR 조건 |
UNION ALL 로 분해 |
NOT IN , != |
NOT EXISTS , ANTI JOIN |
컬럼 + 1 = 100 |
산술 연산 제거, 등가 조건 유지 |
✅ 원칙: 인덱스가 걸릴 수 있도록 조건절 구조를 단순하고 명확하게 구성
4. 📁 인덱스 설계 전략
- 선행 컬럼 원칙: 다중 컬럼 인덱스에서 첫 번째 컬럼이 WHERE절에 있어야 함
- Function-Based Index: 함수가 불가피할 경우 생성
- 불필요 인덱스 제거: 사용률 낮고 DML 부하 크면 DROP 고려
- 유지 기준:
- BLEVEL ≥ 3, LEAF_BLOCKS ↑, CLUSTERING_FACTOR ≒ ROWS → REBUILD
5. 🧠 힌트 사용 전략
힌트 |
의미 |
INDEX(TABLE) |
인덱스 사용 유도 |
FULL(TABLE) |
Full Scan 유도 |
LEADING(A B) |
조인 순서 고정 |
USE_NL(B) |
Nested Loop Join 유도 |
USE_HASH(B) |
Hash Join 유도 |
MERGE(V) / NO_MERGE(V) |
뷰 병합 여부 결정 |
PARALLEL(TABLE n) |
병렬 실행 유도 |