옵티마이저 힌트를 통해 뷰(View) 내부의 실행 계획을 제어하고 싶을 때 사용합니다.
SELECT /*+ LEADING(X.E X.D) */ * FROM ( SELECT E.EMPNO, E.ENAME, D.DEPTNM FROM EMP E, DPET D WHERE E.DEPTNO = D.DEPTNO ) X
글로벌 힌트가 제대로 사용되려면 다음과 같은 조건을 만족해야 합니다.
- 뷰 머징 쿼리 변환이 발생하지 않아야 함
- 글로벌 힌트 내에 다른 쿼리 블록의 테이블을 사용하지 않아야 함
첫번째 조건으로 글로벌 힌트를 사용하려면 뷰머징을 하지 않도록 해야 합니다.
[잘못된 예]SELECT /*+ MERGE(X) LEADING(X.E X.D) */ * FROM ( SELECT E.EMPNO, E.ENAME, D.DEPTNM FROM EMP E, DPET D WHERE E.DEPTNO = D.DEPTNO ) X[올바른 예]
SELECT /*+ NO_MERGE(X) LEADING(X.E X.D) */ * FROM ( SELECT E.EMPNO, E.ENAME, D.DEPTNM FROM EMP E, DPET D WHERE E.DEPTNO = D.DEPTNO ) X
두번째 조건은 아래 예시를 보면 이해가 빠릅니다.
[잘못된 예]SELECT /*+ LEADING(A B.X B.Y) */ * FROM CUST A , (SELECT * FROM ORD X, ORD_DTL Y WHERE X.ORD_NO = Y.ORD_NO ) B WHERE A.CUST_NO = B.CUST_NO[올바른 예]
SELECT /*+ LEADING(A) LEADING(B.X B.Y) */ * FROM CUST A , (SELECT * FROM ORD X, ORD_DTL Y WHERE X.ORD_NO = Y.ORD_NO ) B WHERE A.CUST_NO = B.CUST_NO