1 쿼리 변환 종류
- 10g부터는 서브쿼리 Unnesting과 뷰 Merging이 비용기반 쿼리 변환으로 전환됨
- 조건절 Pushing 중 조인 조건 pushdown도 비용기반 쿼리 변화으로 전환
- 나머지는 변환된 쿼리가 항상 더 나은 성능을 제공하므로 비용기반으로 전환이 불필요
1.1 서브쿼리 Unnesting
- 옵티마이져가 동일한 결과를 보장하는 조인문으로 변환하고 나서 최적화 하는것 이를 '서브쿼리 Unnesting' 이라고 함.
- 서브쿼리를 메인쿼리와 같은 레벨로 풀어 내서 다양한 엑세스 경로와 조인 메소드를 평가 할수 있음.
- 옵티마이저는 조인 형태로 변환했을때 더 나은 실행계획을 찾을 가능성이 높다
- 변환된 쿼리의 예상 비용이 더 낮을 때만 Unnesting된 버전을 사용, 그렇지 않을 때는 원본 쿼리 그대로 필터 방식으로 최적화 한다.
1.1.1 unnest 힌트
- 서브쿼리를 Unnesting 함을써 조인방식으로 최적화하도록 유도.
1.1.2 no_unnesting 힌트
- 서브쿼리를 그대로 둔 상태에서 필터 방식으로 최적화 하도록 유도.
1.2 뷰 Merging
1.3 조건절 Pushing
1.4 조건절 이행
1.5 공통 표현식 제거
1.6 outer 조인을 Inner 조인으로 변환
1.7 실체화 뷰 쿼리로 재작성
1.8 star 변환
1.9 outer 조인 뷰에 대한 조인 조건 Pushdown
1.10 or-expansion
2 쿼리 변환 두 가지 방식
2.1 휴리스틱 쿼리 변환
: 결과만 보장된다면 무조건 쿼리 변환을 수행
2.2 비용기반 쿼리 변환
: 변환된 쿼리의 비용이 더 낮을 때만 그것을 사용하고, 그렇지 않을 때는 원본 쿼리 그대로 두고 최적화를 수행한다.