{code:SQL | title= 서브쿼리가 3개인 경우의 Trace 내용 | borderStyle=solid} ****************************** PARAMETERS WITH ALTERED VALUES ****************************** _optimizer_cost_based_transformation = exhaustive --> Search Type을 Exhaustive로 바꾼 경우 SU: Using search type: exhaustive -- 'PARAMETERS WITH ALTERED VALUES' 항목에 먼저 나타난다. SU: Starting iteration 1, state space = (2,3,4) : (1,1,1) SU: Updated best state, Cost = 1435.51 --> 각 Iteration별로 Cost를 구하여 최저 Cost일 경우 Best State(최적상태)로 Update. SU: Starting iteration 2, state space = (2,3,4) : (1,1,0) SU: Not update best state, Cost = 385405.50 --> Cost가 Iteration 1보다 높으므로 Update하지 않는다. SU: Starting iteration 3, state space = (2,3,4) : (1,0,1) SU: updated best state, Cost = 1425.02 --> 최저 Cost이므로 Best State(최적상태)로 Update. SU: Starting iteration 4, state space = (2,3,4) : (1,0,0) SU: Not update best state, Cost = 385390.90 SU: Starting iteration 5, state space = (2,3,4) : (0,1,1) SU: Not update best state, Cost = 22208.92 SU: Starting iteration 6, state space = (2,3,4) : (0,1,0) SU: Not update best state, Cost = 385004.97 SU: Starting iteration 7, state space = (2,3,4) : (0,0,1) SU: Not update best state, Cost = 18244.64 SU: Starting iteration 8, state space = (2,3,4) : (0,0,0) SU: Not update best state, Cost = 406160.14 SU: Will unnest subquery SUBQ3 (#2) --> (1,0,1) 이므로 서브쿼리블록 1과 3이 Unnesting되었다. SU: Will not unnest subquery SUBQ2 (#3) SU: Will unnest subquery SUBQ1 (#4) SU: Reconstructing original query from best state. --> best state(Iteration 3)로부터 Original Query 재작성 {code} * Exhaustive Type의 Iteration 횟수는 8(서브쿼리가 3개이므로 2의 3승)이다. |
{code:SQL | title= 서브쿼리가 3개인 경우의 Trace 내용 2 | borderStyle=solid} ***************************** Cost-Based Subquery Unnesting ***************************** SU: Considering subquery unnest on query block MAIN (#1). --> 1번 (채번순서)MAIN 쿼리블럭 SU: Checking validity of unnesting subquery SUBQ1 (#4) --> 4번 SU: Passed validity checks, but requires costing. SU: Checking validity of unnesting subquery SUBQ2 (#3) --> 3번 SU: Passed validity checks, but requires costing. SU: Checking validity of unnesting subquery SUBQ3 (#2) --> 2번 SU: Passed validity checks, but requires costing. SU: Using search type: exhaustive {code} * 시퀀스를 이용하여 일련번호를 채번하듯이 Logical Optimizer도 각 쿼리블럭을 채번했다. * MAIN 쿼리블록은 1번이며 가장 아래에 있는 SUBQ3이 2번 SUBQ2가 3번 가장위에있는 SUBQ1이 4번이다. |
{code:SQL | title= 서브쿼리가 5개인 경우의 Trace 내용 | borderStyle=solid} ****************************** PARAMETERS WITH ALTERED VALUES ****************************** _optimizer_cost_based_transformation = exhaustive SU: Using search type: exhaustive SU: Starting iteration 1, state space = (2,3,4,5,6) : (1,1,1,1,1) SU: Updated best state, Cost = 1459.38 ...중간생략 SU: Starting iteration 7, state space = (2,3,4,5,6) : (1,1,0,0,1) SU: Updated best state, Cost = 1283.83 SU: Starting iteration 8, state space = (2,3,4,5,6) : (1,1,0,0,0) ...중간생략 SU: Starting iteration 32, state space = (2,3,4,5,6) : (0,0,0,0,0) SU: Not update best state, Cost = 434282.61 SU: Will unnest subquery SUBQ5 (#2) SU: Will unnest subquery SUBQ4 (#3) SU: Will not unnest subquery SUBQ3 (#4) SU: Will not unnest subquery SUBQ2 (#5) SU: Will unnest subquery SUBQ1 (#6) SU: Reconstructing original query from best state. {code} * 이 Type을 선택하면 SQL이 실행되어 인덱스나 테이블을 Scan하는 시간보다 Hard Parsing 시간이 더 오래 걸릴 수도 있다. |
{code:SQL | title= 서브쿼리가 7개인 경우의 Trace 내용 | borderStyle=solid} ****************************** PARAMETERS WITH ALTERED VALUES ****************************** _optimizer_cost_based_transformation = exhaustive SU: Using search type: Two_Pass ...이후생략 {code} * Search Type은 고정적이지 않고 상황에 따라 Cut-off한다. |