문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 다음 판 양쪽 다음 판 | ||
study:oracle:datadb:4week_2:chap4 [2010/05/26 18:24] zummaz |
study:oracle:datadb:4week_2:chap4 [2010/05/27 21:44] zummaz |
||
---|---|---|---|
줄 1: | 줄 1: | ||
- | ====3.3.4. 조인 방법 선택용 힌트==== | + | ======3.3.4. 조인 방법 선택용 힌트====== |
- | + | ||
*앞서서 공부한 다양한 조인방식을 힌트(HINT)를 사용해 옵티마이져에게 권고(충고)할 수 있다. | *앞서서 공부한 다양한 조인방식을 힌트(HINT)를 사용해 옵티마이져에게 권고(충고)할 수 있다. | ||
*조인방법은 다양한 주어진 상황에 영향을 받는다. 다음과 같은 요소를 잘 검토해 HINT를 사용하도록 하자. | *조인방법은 다양한 주어진 상황에 영향을 받는다. 다음과 같은 요소를 잘 검토해 HINT를 사용하도록 하자. | ||
줄 10: | 줄 9: | ||
- | - | ||
- | ===USE_NL=== | + | =====USE_NL===== |
*Nested Loops방식을 사용하여 조인을 수행하도록 유도하는 힌트이다 | *Nested Loops방식을 사용하여 조인을 수행하도록 유도하는 힌트이다 | ||
*이 힌트는 대상 집합 간의 조인 방식을 지칭할 뿐이며, 조인 순서에는 영향을 미치지 않는다. | *이 힌트는 대상 집합 간의 조인 방식을 지칭할 뿐이며, 조인 순서에는 영향을 미치지 않는다. | ||
- | 예) SELECT /*+ USE_NL(a b c) */... | + | |
FROM TAB1 a, TAB2 b, TAB3 c | FROM TAB1 a, TAB2 b, TAB3 c | ||
WHERE ... | WHERE ... | ||
- | ===NO_USE_NL=== | + | |
+ | =====NO_USE_NL===== | ||
*USE_NL 힌트가 옵티마이져에게 지정한 테이블에 대한 조인 방식을 제시하는 것인데 반해, NO_USE_NL 힌트는 옵티마이져에게 지정한 테이블에 대해 Nested Loop 조인방식을 제외한 다른 방식의 조인-해쉬조인 이나 Sort Merge 조인등 -을 사용할을 제시한다. | *USE_NL 힌트가 옵티마이져에게 지정한 테이블에 대한 조인 방식을 제시하는 것인데 반해, NO_USE_NL 힌트는 옵티마이져에게 지정한 테이블에 대해 Nested Loop 조인방식을 제외한 다른 방식의 조인-해쉬조인 이나 Sort Merge 조인등 -을 사용할을 제시한다. | ||
*옵티마이져의 실행계획 수립에 대해 USE_NL이 적극적인 개입이라면 NO_USE_NL은 소극적인 개입이라고 할 수 있다. | *옵티마이져의 실행계획 수립에 대해 USE_NL이 적극적인 개입이라면 NO_USE_NL은 소극적인 개입이라고 할 수 있다. | ||
- | Nested Loops조인이 최적이라 판단되는 상황에서는 옵티마이져가 이 힌트를 무시할수도 있다. | + | * **Nested Loops조인이 최적이라 판단되는 상황에서는 옵티마이져가 이 힌트를 무시**할수도 있다. |
- | 예) SELECT /*+ NO_USE_NL(l h) */....... | + | |
FROM orders h, order_items l | FROM orders h, order_items l | ||
WHERE l.order_id, = h.order_id | WHERE l.order_id, = h.order_id | ||
AND l.order_date >= ' | AND l.order_date >= ' | ||
- | ===USE_NL_WITH_INDEX=== | + | |
+ | =====USE_NL_WITH_INDEX===== | ||
*Nested Loops조인에서 선행처리되는 **외측루프의 처리주관 인덱스를 지정**할 때 사용하는 힌트이다. | *Nested Loops조인에서 선행처리되는 **외측루프의 처리주관 인덱스를 지정**할 때 사용하는 힌트이다. | ||
- | *과거에는 USE_NL 과 INDEX 힌트를 같이 사용하였지만 이 힌트는 이들을 하나로 통합한 것이다. | + | *과거에는 |
- | 예) SELECT /*+ USE_NL_WITH_INDEX(l item_prod_ix) */.... | + | |
FROM orders hm order_items l | FROM orders hm order_items l | ||
WHERE l.order_id = h.order_id | WHERE l.order_id = h.order_id | ||
줄 39: | 줄 40: | ||
*만약 이 힌트에서 인덱스를 지정하지 않았다면, | *만약 이 힌트에서 인덱스를 지정하지 않았다면, | ||
- | 참고: Nested Loops 조인에서 ' | + | *참고: Nested Loops 조인에서 ' |
- | ===USE_HASH=== | + | |
+ | |||
+ | |||
+ | |||
+ | =====USE_HASH===== | ||
*해쉬조인 방식으로 조인이 수행되도록 우도하는 힌트이다. | *해쉬조인 방식으로 조인이 수행되도록 우도하는 힌트이다. | ||
*해쉬조인은 어느 한쪽 테이블이작아서 인-메모리 해쉬조인으로 수행될 수 있다면 매우 양호한 속도를 갖는다. | *해쉬조인은 어느 한쪽 테이블이작아서 인-메모리 해쉬조인으로 수행될 수 있다면 매우 양호한 속도를 갖는다. | ||
- | | + | * **대부분 경우는 옵티마이져가 통계정보를 토대로 빌드 입력과 검색입력을 결정**하므로 일부러 ' |
- | 예) SELECT /*+ USE_HASH (a b) */... | + | |
FROM sale a, pre_order b | FROM sale a, pre_order b | ||
WHERE a.order_id = b.order_id | WHERE a.order_id = b.order_id | ||
줄 56: | 줄 61: | ||
FROM member m, dept d | FROM member m, dept d | ||
WHERE m.deptid = d.deptid; | WHERE m.deptid = d.deptid; | ||
- | ===USE_MERGE=== | + | |
+ | |||
+ | |||
+ | =====USE_MERGE===== | ||
*Sort Merge방식으로 조인을 수행하도록 유도하느 힌트이다. | *Sort Merge방식으로 조인을 수행하도록 유도하느 힌트이다. | ||
*필요하다면 ' | *필요하다면 ' | ||
줄 69: | 줄 77: | ||
- | ==참조한문서== | + | ====참조한문서==== |
" | " | ||
+ | |||
+ |