본문 바로가기

오라클 성능고도화 2권

Chap04. 01 쿼리 변환이란?

우리가 작성하는 Query에서

결과는 같더라도 SQL문이 다르게 작성될 수 있습니다.

 

하지만 내부적으로는 어떤 형태로 작성하느냐에 따라 성능에 차이는 천차만별이죠.

 

 

위 Query의 결과는 같지만 수행 속도는 차이가 있을 수 있죠(Query 변환이 안일어난다고 가정)

 

 

처음부터 성능이 좋은 SQL을 작성하는 것이 좋지만

Query 최적화 원리를 이해하고 작성하는 개발자는 흔하지는 않을꺼같습니다.

그러기에 비용기반옵티마이저는 최적화(Optimization) 단계 때 최적화에 유리한 형태로

SQL을 재작성을 하는 작업을 먼저합니다.

(Oracle SQL처리과정 참조)

 

SQL 처리 단계

 

 

Optimizer가 최적화(Optimization) 단계에서

1. Query Transformer(쿼리변환) 진행하게 되는데

SQL을 분석해 의미적으로 동일(같은결과)하면서 더 나은 성능이

기대되는 형태로 재작성하는 것을 말합니다.

 

 

[ Query 변환의 종류 ]

1) 서브쿼리 Unnesting                                                      

2) 뷰 Merging

3) 조건절 Pushing

4) 조건절 이행

5) 공통 표현식 제거

6) Outer 조인을 Inner 조인으로 변환

7) 실체화 뷰 쿼리로 재작성

8) Star 변환

9) Outer 조인 뷰에 대한 조인 조건 Pushdown

10) OR-Expansion

 

10g부터 기준으로

1, 2, 7~10 -> 비용기반 쿼리 변환

3~6 -> 휴리스틱 쿼리 변환

 

[ 쿼리 변환 방식 ]

1) 휴리스틱(Heuristic) 쿼리 변환 : 결과만 보장된다면 무조건 쿼리 변환을 수행

                                            일종의 규칙 기반 최적화 기법

2) 비용기반(Cost-Based) 쿼리 변환 : 변환된 쿼리의 비용이 더 낮을 때만 그것을 사용,

                                               그렇지 않을 때는 원본 쿼리 그대로 두고 최적화를 수행