4.5 Linear Type 전략

{code:SQLtitle= 서브쿼리가 3개인 경우의 Trace 내용borderStyle=solid}
*************************************
PARAMETERS WITH ALTERED VALUES
******************************
-- 파라미터는 Default 값이므로 생략됨
-- 나머지는 Iterative Type과 동일, 서브쿼리 4,5늘려도 동일
{code}
{code:SQL
title= 서브쿼리가 2개인 경우의 Trace 내용borderStyle=solid}
*************************************
PARAMETERS WITH ALTERED VALUES
******************************
-- 파라미터는 Default 값이므로 생략됨
SU: Using search type: exhaustive --> Exhaustive로 바뀌었다.
SU: Starting iteration 1, state space = (2,3) : (1,1)
SU: Updated best state, Cost = 1026.01
SU: Starting iteration 2, state space = (2,3) : (1,0)
SU: Not update best state, Cost = 384996.00
SU: Starting iteration 3, state space = (2,3) : (0,1)
SU: Updated best state, Cost = 1012.78
SU: Starting iteration 4, state space = (2,3) : (0,0)
SU: Not update best state, Cost = 384978.66
SU: Will not unnest subquery SUBQ2 (#2)
SU: Will unnest subquery SUBQ1 (#3)
SU: Reconstructing original query from best state.
{code}
* 테스트 결과 Iterative Type과 Linear Type동작방식이 완벽히 같았다. Liner Type알고리즘을 아직 반영못했다는 증거
※ 참고
Linera 접근법은 처음에 (1,1,1)의 Cost를 구하고 단계적으로 SUBQ3, SUBQ2, SUBQ1에 대하여 Unnesting여부를 결정한다.
ex. (1,1,1)과 (0,1,1)의 Cost를 비교하여 SUBQ3의 Unnesting 여부를 판단할 수 있다. 이중에 (1,1,1)의 Cost가 저렴하다고 가정하면 SUBQ3는 Unnesting하는 것으로 확정된다.
다음 (1,1,1)과(1,0,1)의 Cost를 비교하여 SUBQ2의 Unnesting 여부를 판단한다. 계속하여 (1,1,1)의 Cost가 더 저렴하다면 SQBQ2또한 Unnesting 된다.
마지막으로 (1,1,0)과 (1,1,1)의 Cost를 비교하여 최종적으로 SUBQ1의 Unnesting여부를 판단하게 된다.
최종적으로 (1,1,0)이 선택되었다면 Linear Type에서 고려한 경우의 수는 총 4가지이며 다움과 같다.
(1,1,1),(0,1,1),(1,0,1),(1,1,0) 이결과는 Exhaustive Type과 비교해보면 절반의 경우만 고려된다.
이방법을 적용하면 최적의 Cost는 보장할 수 없지만 대부분의 경우 Sub Optimal(다른말로 표현하면 Second Best) Plan을 구할 수 있다.
이 Linear Type의 동작방식은 'Dynamic Programing approach'라 불린다.
하지만 현재 상태에서 이것은 이론일 뿐, 테스트 결과 Linear Type은 Iterative Type과 똑같이 2 * N 가지의 경우를 고려한다.
아직까지 Linear Type접근법은 구현이 되지 않았다.