2-A. Heuristic Query Transformation 란?
-
Heuristic이란?
- 문제 해결에서 노력을 최소화하기 위한 고찰이나 규칙.
- DB 옵티마이저는 Costing 없이 빠르게 처리하기 위해 Heuristic Rule을 사용함.
-
Query Transformation 목적:
- SQL 성능을 빠르게 하기 위함.
- 꼭 Costing을 거치지 않고도 SQL을 단순화시켜 빠르게 처리할 수 있음.
-
예시 1: 불필요한 ORDER BY 제거
SELECT COUNT(*)
FROM tabl
ORDER BY col1;
COUNT(*)는 결과 한 줄이므로 ORDER BY는 불필요함.
- 이럴 때 옵티마이저는 ORDER BY를 제거함 → Heuristic Rule 적용 사례.
-
예시 2: 꼭 필요한 작업만 수행
SELECT a.고객번호, a.고객명
FROM 고객 a, 공동고유 b
WHERE a.고객구분코드 = b.고객구분코드(+);
- 필요한 컬럼만 추출하고, 조인을 최소화하여 불필요한 작업 생략.
- 단순히 고객번호와 고객명을 조회하는데 공통고유 테이블의 조인은 필요하지 않음
- A 고객구분코드가 null인 데이터가 존재한다면 의미가 있음
- 이외의 상황에서는 Outer 조인으로 인하여 공통코드 테이블은 전혀 필요가 없음
- 고객과 공통코드 조인에서 공통코드가 필요 없는 경우 → 조인 제거.
Heuristic Transformation의 핵심
- 대부분의 규칙은 Costing 없이 작동.
- SQL을 단순화하여 Hard Parsing의 부담을 줄이는 데 초점.
- 약 30가지 이상의 Transformation Rule 존재하며, 튜닝에 있어 정확한 이해가 필수.
- Rule을 모르면 변경된 SQL 실행계획을 이해할 수 없음.
2-1. CSE (Common Subexpression Elimination): Where 절에서 or 사용시 중첩된 조건절은 제거하라
1. 개념
- CSE는 Where 절에서 중복된 조건을 찾아 제거하는 최적화 기법.
OR 조건에서 중복된 공통 조건이 있을 경우, 이를 제거하여 불필요한 연산을 줄임.
2. 예시
SELECT department_id, salary
FROM employee
WHERE (department_id = 60 AND salary = 4200)
OR (department_id = 60);
→ department_id = 60 조건이 중복되므로, 옵티마이저는 (department_id = 60)만 남기고 나머지를 제거.
3. 실행계획 및 Trace 분석
Predicate Information에 DEPARTMENT_ID=60만 남은 것을 통해 조건이 제거된 것을 확인.