오라클 성능고도화 2권

Chap04. 01 쿼리 변환이란?

Tech_Wave 2021. 8. 12. 15:31
  • 우리가 작성한 SQL에서 결과는 같더라도 서로 다르게 작성할 수 있습니다.
  • 하지만 결과가 동일하더라도 SQL문을 어떤 형태로 작성하느냐에 따라 성능에 차이가 생길 수 있습니다.

 

[SQL 1]
SELECT *
FROM DEPT D
WHERE NOT EXISTS (SELECT 'X'
                  FROM EMP
                  WHERE DEPTNO = D.DEPTNO);

[SQL 2]
SELECT D.*
FROM DEPT D, EMP E
WHERE E.DEPTNO(+) = D.DEPTNO
AND   E.ROWID IS NULL;

 

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

 

 

애초에 가장 좋은 성능을 낼 수 있는 형태로 쿼리를 작성하면 좋겠지만 쿼리 최적화 원리를 이해하고 작성하는 개발자는 흔하지는 않을꺼 같습니다.

그러기에 비용기반 옵티마이저는 최적화(Optimization) 단계 때 최적화에 유리한 형태로 SQL을 재작성을 하는 작업을 먼저합니다.

 

Oracle SQL처리과정

SQL 처리 단계

  • 비용기반 옵티마이저의 서브 엔진으로서 Query Transformer,Estimator, Plan Generator가 있다고 설명했는데, 이 중 Query Transformer가 사용자가 작성한 SQL을 최적화에 유리한 형태로 재작성을 해주게 됩니다.
  • 쿼리변환(Query Transformation)은, 쿼리 옵티마이저가 SQL을 분석해 의미적으로 동일하면서도 더 나은 성능이 기대되는 형태로 재작성하는 것을 말합니다.

 

[ Query 변환의 종류 ]

1) 서브쿼리 Unnesting                                                      

2) 뷰 Merging

3) 조건절 Pushing

4) 조건절 이행

5) 공통 표현식 제거

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

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

8) Star 변환

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

10) OR-Expansion

 

 

[ 쿼리 변환 방식 ]


  1. 휴리스틱(Heuristic) 쿼리 변환 : 결과만 보장된다면 무조건 쿼리 변환을 수행합니다.
    • 일종의 규칙기반(Rule-based)최적화 기법이라고 할 수 있으며, 경험적으로 (최소한 동일하거나) 항상 더 나은 성능을 보일 것이라는 옵티마이저 개발팀의 판단이 반영된 것입니다.
  2. 비용기반(Cost-Based) 쿼리 변환 : 변환된 쿼리의 비용이 더 낮을 때만 그것을 사용하고, 그렇지 않을 때는 원본 쿼리 그대로 두고 최적화를 수행합니다.

 

 

 

 

 

반응형