{code:SQL | title= 서브쿼리가 3개인 경우의 Trace 내용 | borderStyle=solid} ****************************** PARAMETERS WITH ALTERED VALUES ****************************** _optimizer_cost_based_transformation = two_pass SU: Using search type: two pass SU: Starting iteration 1, state space = (2,3,4) : (1,1,1) SU: Updated best state, Cost = 1435.51 SU: Starting iteration 2, state space = (2,3,4) : (1,1,1) SU: Not update best state, Cost = 1435.51 SU: Will unnest subquery SUBQ3 (#2) SU: Will unnest subquery SUBQ2 (#3) SU: Will unnest subquery SUBQ1 (#4) SU: Reconstructing original query from best state. {code} * Iteration은 횟수는 2지만 실제로는 한번만 수행 한 것과 같다.((1,1,1)과(0,0,0)비교대신 (1,1,1)의 Cost만 구했다) |
※참고 (0,0,0)을 적용한다는 것은 모든 서브쿼리에 대해 Filter를 적용한다는 것이다. 이 경우는 대부분 Unnesting 된 것에 비하여 Cost가 높다. 왜냐하면 서브쿼리가 인라인뷰로 바뀌면 Nested Loop/Merge/Hash Join등을 다양하게 적용할 수 있고 심지어 Semi Join까지 고려해 볼 수 있다. 조인 순서도 Physical 옵티마이져가 최적으로 조정할 것이다. 하지만 Filter의 경우는 이러한 선택이 주어지지 않으므로 대부분 Cost가 낮다. 서브쿼리 개수를 4,5,6,7로 변경해도 search type은 변화지 않았다. | ||
---|---|---|
{code:SQL | title= 서브쿼리가 2개인 경우의 Trace 내용 | borderStyle=solid} ****************************** PARAMETERS WITH ALTERED VALUES ****************************** _optimizer_cost_based_transformation = exhaustive --> exhaustive로 변경됐다. {code} * 서브쿼리 2개정도는 모든경우의수(4회)를 고려해도 큰부하가 없다고 판단 |