3.3.4. 조인 방법 선택용 힌트
USE_NL
NO_USE_NL
USE_NL 힌트가 옵티마이져에게 지정한 테이블에 대한 조인 방식을 제시하는 것인데 반해, NO_USE_NL 힌트는 옵티마이져에게 지정한 테이블에 대해 Nested Loop 조인방식을 제외한 다른 방식의 조인-해쉬조인 이나 Sort Merge 조인등 -을 사용할을 제시한다.
옵티마이져의 실행계획 수립에 대해 USE_NL이 적극적인 개입이라면 NO_USE_NL은 소극적인 개입이라고 할 수 있다.
Nested Loops조인이 최적이라 판단되는 상황에서는 옵티마이져가 이 힌트를 무시할수도 있다.
예) SELECT /*+ NO_USE_NL(l h) */.......
FROM orders h, order_items l
WHERE l.order_id, = h.order_id
AND l.order_date >= '20050101';
USE_NL_WITH_INDEX
예) SELECT /*+ USE_NL_WITH_INDEX(l item_prod_ix) */....
FROM orders hm order_items l
WHERE l.order_id = h.order_id
AND l.order_item like 'ADEN%'
AND h.order_dt between '20051001' and '20051015';
만약 이 힌트에서 인덱스를 지정하지 않았다면, 내측 루프의 연결고리 인덱스가 정상이어야 외측루프(선행 테이블)의 어떤 인덱스가 처리주관 인덱스로 사용될 수 있다. 만약 특정 인덱스를 지정하였다면, 내측 루프의 연결고리가 정상일 때 지정한 인덱스가 적용될 수 있다.
참고: Nested Loops 조인에서 '연결고리 정상'에 대한 상세한 개념 [ 2.2 연결고리 상태가 조인에 미치는 영향(page 517~523)편]
USE_HASH
예) SELECT /*+ USE_HASH (a b) */...
FROM sale a, pre_order b
WHERE a.order_id = b.order_id
AND a.sale_dt LIKE '2005%';
예) SELECT /*+ NO_USE_HASH(m d) */....
FROM member m, dept d
WHERE m.deptid = d.deptid;
USE_MERGE
예) SELECT /*+ USE_MERGE(a b) */.......
FROM sale a, pre_order b
WHERE a.order_id = b.order_id
AND a.sale_dt BETWEEN '20050701' AND '20050930'
AND b.cust_no = '101';
참조한문서