{panel:title= State Space 구조도} | ||
| ||
{code:SQL | title= 서브쿼리가 3개인 경우의 Trace 내용 | borderStyle=solid} ************************************* PARAMETERS WITH ALTERED VALUES ****************************** _optimizer_cost_based_transformation = on SU: Using search type: exhaustive 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,0) SU: Not update best state, Cost = 385405.50 SU: Starting iteration 3, state space = (2,3,4) : (1,0,1) SU: updated best state, Cost = 1425.02 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) SU: Will not unnest subquery SUBQ2 (#3) SU: Will unnest subquery SUBQ1 (#4) SU: Reconstructing original query from best state. {code} 각 Iiteration마다 State Space가 사용되었다. |
최저 Cost에 해당하지 않는 State정보, 그이외의 State정보가 나중에도 필요하다.
ex)
CSU관점에서는 (1,0)이 최저 Cost라고 가정한다면 CSU이후에 수행되는 CVM(Complex View Merging)이나
JPPD(Join Predicate Push Down)관점에서는 전혀 결과가 다를 수 있다.
즉 CSU 단계에서는 (1,0)이 최저 Cost 이지만 CVM 단계에서는 CSU(1,1)+CVM을 적용한 SQL이 최저 Cost가 될 수 있다.
따라서 최저 Cost에 해당하는 State 뿐만 아니라 모든 Iteration의 State를 저장해야 한다. 4.12, 4.13장 자세히 설명