3.3.6. 액세스 수단 선택을 위한 힌트

FULL

예) SELECT /*+ FULL(t) */......
     FROM big_table t
     WHERE cre_date >= '20050101';

HASH

예) /*+ HASH(table_name) */

CLUSTER

예) /*+ CLUSTER(table_name) */

INDEX

예) SELECT /*+ INDEX(s sales_pk) */..........
     FROM sales s
     WHERE sale_date = '20051015';
   SELECT /*+ INDEX(cust_v cust cname_idx) */......
   FROM cust_v
   WHERE cust_name = 'TOMCAT';
   
 


여기서 cust_v는 cust테이블 액세스를 포함하고 있는 View이름이며, cname_idx는 cust 테이블의 cust_name컬럼에 대해 정의된 인덱스임.

NO_INDEX

옵티마이져가 실행계획을 수립할 때 지정한 인덱스는 제외하고, 다른 액세스 방법을 고려하도록 유도하는 힌트이다.

예) SELECT /*+ NO_INDEX(m member_pk) */..........
   FROM member m
 WHERE member_id > 10200;


INDEX_ASC

예) SELECT /*+ INDEX_ASC(a idx01) */........
     FROM tab1 a
     WHERE col1 LIKE 'ABC%';

INDEX_DESC

예) SELECT /*+ INDEX_DESC(a idx01) */........
     FROM tab1 a
     WHERE col1 LIKE 'ABC%';

INDEX_COMBINE

예) SELECT /*+ INDEX_COMBINE(e sal_bix hiredate_bix) */.....
     FROM emp e
     WHERE sal > 3000 AND hiredate < '20050715';

INDEX_FFS


예) SELECT /*+ INDEX_FFS(table_name index_name) */......

이와 반대로 NO_INDEX_FFS 힌트에서 지정한 테이블의 인덱스에대해 '고속 전체 인덱스 스캔'방식을 제외한 다른 액세스 방법을 사용하도록 유도한다.

INDEX_JOIN

예) SELECT /*+ INDEX_JOIN(e SAL_BMP HIREDATE_IX) */ sal, hiredate
     FROM emp e
     WHERE hiredate < sysdate AND sal > 2000;

INDEX_SS

예) SELECT /*+ INDEX_SS(e emp_idx) */....
     FROM emp e
     WHERE hiredate = sysdate

이와 반대로 NO_INDEX_SS 힌트는 힌트에서 지정한 테이블의 인덱스에 대해 스킵스캔을 제외한 다른 액세스 방법을 사용하도록 유도한다.

INDEX_SS_ASC

INDEX_SS_DESC

예) SELECT /*+ INDEX_SS_DESC(e ename_ix) */........
     FROM employees e
     WHERE first_name = 'Steven';
참조한문서

“오라클클럽” http://wiki.oracleclub.com/pages/viewpage.action?pageId=1966263&