조건절 이행이란 

 - 이 쿼리 변환을 한마디로 요약하면, [ (A=B) 이고 (A=C) 이다 ]는 추론을 통해 새로운 조건절을 

   내부적으로 생성해 주는 쿼리변환이다. [(A>B) 이고 (B>C)이면 (A>C)이다]와 같은 추론도 

   가능하다. 

 - 새로운 필터 조건이 추가되면서 조인 조건이 사라진다. 새로운 필터 조건으로 인하여 

   조인 조건이 필요가 없어졌다고 생각하고 옵티마이저가 중복 산정하는 것을 방지하기 위해 

   그렇게 처리하는 것이다. 

 - 9i에서는 사용자가 의도적으로 조인문을 한 버 기술하면 이 조인문이 다시 나타났는데, 

   10g부터는 아무리 여러 번 기술하더라도 그런 현상이 생기지 않는다. 

 - 만약 조건절 이행이 작용해 조인 조건이 사라지고 이로 인해 비용이 잘못 계산되는 문제가 

   생긴다면, 사용자가 명시적으로 새로운 필터조건을 추가하거나 조인문을 가공하는 방법을 

   사용해 볼 수 있다.  그러면 조건절이 사라지지 않고 그대로 남게 되며, 계산된 비용도 

   달라진다. 

      조인문 가공 방법 예시 ) d.deptno = e.deptno + 0


조건절 이행이 효과를 발휘하는 사례 

 - 내부적으로 조건절 이행이 여러 곳에서 일어나고 있다. 

 - 선분 이력을 between 조건으로 조회할 때는 인덱스 구성과 검색 범위에 따라 

   인덱스 스캔 효율에 많은 차이가 생긴다. 그에 따라 아래와 같은 쿼리에서도 범위를 

   더 제한적으로 줄일 수 있다. 

    SQL 예시) 

       select * 

        from 상품이력 a. 주문 b 

      where b.거래일자 between '20090101' and '20090131'

         and a.상품번호 = b.상품번호 

         and b.거래일자 between a.시작일자 and a.종료일자 

 - 위의 쿼리에서는 아래와 같이 조건절을 명시적으로 추가해 줌으로써 SQL을 튜닝하곤 했다. 

     ● 상품이력, 시작일자 <= '20090131' 

     ● 상품이력, 종료일자 >= '20090101'

 - 하지만 9i 부터는 옵티마이저가 이들 조건을 묵시적으로 추가하고 최적화를 수행한다. 

   ( 8i 버전을 사용하고 있다면 위와 같은 조건절을 명시적으로 추가해 주는 튜닝 기법이 

     여전히 유효하다 )


튜닝사례 1

 - 조인 조건은 아니지만 커럶 간 관계 정보를 통해 추가적인 조건절이 생성되었다. 

   옵티마이저에게 많은 정보를 제공할수록 SQL 성능이 더 좋아진다. 

   ( ip 사례 ) 


튜닝사례 2 

 - 최적의 조인순서를 결정하고 그 순서에 따라 조인문을 기술해주는 것이 매우 중요 

'ORACLE > SQLP' 카테고리의 다른 글

성능고도화 4-7. Or-expansion  (0) 2016.12.26
성능고도화 4-6. 조인제거  (0) 2016.12.26
성능고도화 4-4. 조건절 Pushing  (0) 2016.12.26
성능고도화 4-3. 뷰 Merging  (0) 2016.12.26
성능고도화 4-2 서브쿼리 Unnesting  (1) 2016.12.26

+ Recent posts