4.13 Juxtaposition 배타적인 변환을 동시에 고려하여 Cost가 낮은 것을 선택하라
- 서로 다른 Transformation 을 동시에 고려하는 기법. Cost가 저렴한 Transformation 을 선택한다.
예) CVM 을 고려할 때 JPPD (Join Predicate Push Down) 을 같이 고려하여 Cost비교 후 Cost가 저렴한 것 하나만 선택. - 유의 사항은, Transformation 중 어느 것도 실행되지 않을 수 있다.
예) CVM 수행 후 Cost 와 JPPD 수행 후 Cost 가 모두 원본 SQL보다 Cost가 낮으면 아무것도 CVM, JPPD 모두 선택되지 않음. - Interleaving , Juxtaposition의 차이점
- Interleaving : 혼자서 수행할 수 없고, 반드시 선수조건이 필요하다.
- Juxtaposition : 배타적인 관계에 의해서 둘 중 하나가 선택되는 개념. 선수조건(선 변환)이 필요하지는 않음.
- 아래 SQL은 서브쿼리가 없어 Interleaving 과 같은 CSU (선 변환과정) 가 존재하지 않는다.
( 인라인 뷰 대신 서브쿼리가 있었다면, 선 변환이 필요하므로 Juxtaposition은 발생하지 않는다. )
SELECT /*+ QB_NAME(MAIN_VIEW) */
d.department_id, l.city, l.countery_id, e.cnt, e.max_sal, e.minal
FROM department d, location l
( select /*+ QB_NAME(SUB_VIEW) */
e.department_id, count(*) cnt, max(salary) max_sal, min(salary) min_sal
from employee e
group by e.department_id ) e
WHERE d.location_id = l.location_id
and e.department_id = d.department_id
and l.location_id = 1800 ;
- 인라인 뷰 e 는 Group by 와 집계함수가 존재하므로 Complex View 이다.
- Complex View 가 아니면 CBQT 가 발생하지 않으므로, CVM, JPPD 간 Juxtaposition을 볼 수 없다.
- 10053 Trace 로 확인
- Iteration 1 에서 CVM 고려하나 적용안함. ( Cost 5.0039 )
- CVM 적용된 Iteration 2 에서는 CVM 발생하여 메인블럭명이 SEL$1353BF6 으로 변경. ( Cost 4.0010 )
- CVM 과정에서 Juxtaposition 기능에 의해 JPPD 가 수행된다. 첫 번째 Iteration 은 JPPD 가 적용되지 않은 경우로 Cost 가 5.0039 이다.
- 두 번째 Iteration 에서 JPPD 가 적용되어 Cost 가 4.0011 dlek.
- JPPD 가 적용되지 않은 경우보다 JPPD 적용한 경우의 Cost 가 낮으므로, JPPD 가 Juxtaposition 과정에서 선택됨
- JPPD 가 적용된 Cost 는 CVM이 적용된 경우와 비교시 Cost가 높으므로 CVM을 적용한 Cost 가 Best State 값으로 등록되고 쿼리블록 Sub_view 가 Merge 된다.
- 위 10053 trace 를 정리하면 CVM 과정에서 JPPD 가 동시에 고려되는 형태 이다.
- SSU와 CSU 관계나 SVM 이나 CVM관계는 Juxtaposition 과 아무런 상관이 없다.
- 이들 관계는 서브쿼리나 인라인뷰의 복잡성 ( Simple/Complex)에 따라 나누어지기 때문에 동시에 고려될 수 없다.
- 하지만 JPPD 와 CVM 처럼 배타적인 관계 (동시 적용 불가) 는 비슷하다고 할 수 있다.