이 힌트는 다수의 테이블을 조인하는 경우에 조인 순서에 혼선이 있을 때 적용하는 것이 가장 일반적이다.
Sort Merge 조인 이나 해쉬조인에서는 적은 테이블을 먼저 처리하도록 유도할 때 사용하는 것이 좋다.
ORDERED
FROM절에 기술된 테이블 순서대로 조인을 수행하도록 유도한다.
만약 LEADING 힌트와 함께 사용하면 LEADING 힌트는 무시된다.
예) SELECT /*+ ORDERED */ ...
FROM TAB1, TAB2, TAB3
WHERE ....
ORDERED 힌트는 액세스 순서만 제시할 뿐이고, 조인 방법 과는 무관하기 때문에 조인방법을 유도하기 위한 USE_NL, USE_MERGE등의 힌트와 함께 사용하는 것이 일반적이다
예) SELECT /*+ ORDERED USE_NL(A B C) */.........
FROM TAB1 a, TAB2 b, TAB3 c
WHERE ........
LEADING
FROM절에 기술한 테이블의 순서와 상관없이 조인 순서를 제어하는 힌트로서 ORDERED 힌트와는 달리 FROM절을 변경 필요 없이 사용할 수 있다.
ORDERED 힌트와 함께 사용되면 무시된다.
예) SELECT /*+ LEADING(b c) */......
FROM CUST a, ORDER_DETAIL b, ITEM c
WHERE a.cust_no = b.cust_no
AND b.item_no = c.item_no
AND ....
다른 예
SELECT /*+ ORDERED USE_NL(a b u d) */
B .TASKID,
B.ROOTINSTID,
B.ROLENAME,
B.TITLE,
B.ENDPOINT,
B.RESNAME,
get_dept_fld ('ALL', U.DEPT_CD, 1) AS CUSCOM_NM,
get_dept_fld ('ALL', U.DEPT_CD, 2) AS HQ_NM,
D.DEPT_NM,
U.POSI_NM,
U.TEL_NO
FROM SR_WORKLIST01 A,
BPM_WORKLIST B,
SA_USER01 U,
SA_DEPT01 D
WHERE A.INSTID = B.ROOTINSTID
AND B.ENDPOINT = U.USER_ID
AND U.DEPT_CD = D.DEPT_CD
AND B.STATUS IN ('NEW', 'CONFIRMED')
AND A.SR_CODE = #reqcd#
AND b.isdeleted IS NULL
/*+ ordered */를 사용하게 되면 from절에 정의된 테이블 순서에 의해 드라이빙이 시작되며 조건절의 경우 드라이빙 된 테이블의 조건을 추출하여야 한다.(강제적으로 해당 테이블의 드라이빙 및 데이터 추출 순서 조절 가능)
[출처] 조인 순서 조정을 위한 힌트(ordered, leading)|작성자 광땡
'DataBase' 카테고리의 다른 글
[Oracle] 데이터 모델링 (0) | 2012.11.06 |
---|---|
TRUNCATE TABLE (0) | 2012.11.06 |
정렬과 머지조인 (0) | 2012.05.08 |
[ERWin] ERWin 7.3 Ver. Comment 로 Logical 만들기 (0) | 2012.02.09 |
오라클 튜닝 관련 내용 정리 (0) | 2012.02.09 |