문서의 이전 판입니다!
예) SELECT /*+ FULL(t) */……
FROM big_table t WHERE cre_date >= '20050101';
예) /*+ HASH(table_name) */
예) /*+ CLUSTER(table_name) */
예) 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컬럼에 대해 정의된 인덱스임.
옵티마이져가 실행계획을 수립할 때 지정한 인덱스는 제외하고, 다른 액세스 방법을 고려하도록 유도하는 힌트이다.
예) SELECT /*+ NO_INDEX(m member_pk) */.......... FROM member m WHERE member_id > 10200; *여기에 지정한 인덱스를 제외한 나머지 인덱스들을 액세스 수단으로 고려한다. 그러나 만약 인덱스를 지정하지 않고 테이블만 정의하면 해당 테이블의 모든 인덱스을 힌트 내에 정의한 것으로 인정하여 모든 인덱스를 고려 대상에서 제외한다. *동일한 인덱스를 NO_INDEX힌트와 함께 INDEX, INDEX_ASC, INDEX_DESC, INDEX_COMBINE, INDEX_FFS등에 사용하면 옵티마이져는 두 힌트 모두를 무시한다. *이런 특성을 이용해 튜닝을 위한 테스트를 할 때 기존에 부여했던 힌트를 지우지 않고 잠시 무시하도록 하기 위해 사용할수 있다. 또한 뷰 쿼리에 삽입한 힌트를 무시하고자 할 때도 적용할 수 있다.
예) SELECT /*+ INDEX_ASC(a idx01) */........ FROM tab1 a WHERE col1 LIKE 'ABC%';
예) SELECT /*+ INDEX_DESC(a idx01) */……..
FROM tab1 a WHERE col1 LIKE 'ABC%';
예) SELECT /*+ INDEX_COMBINE(e sal_bix hiredate_bix) */…..
FROM emp e WHERE sal > 3000 AND hiredate < '20050715';
예) SELECT /*+ INDEX_FFS(table_name index_name) */…… 이와 반대로 NO_INDEX_FFS 힌트에서 지정한 테이블의 인덱스에대해 '고속 전체 인덱스 스캔'방식을 제외한 다른 액세스 방법을 사용하도록 유도한다.
즉, 테이블을 전혀 액세스하지 않고 인덱스들만으로 쿼리를 처리할수 있어야 한다. 인덱스 조인은 2개 이상의 인덱스를 범위 스캔한 결과를 ROWID로 해쉬 조인을 수행하여 결과를 얻는다.
예) SELECT /*+ INDEX_JOIN(e SAL_BMP HIREDATE_IX) */ sal, hiredate
FROM emp e WHERE hiredate < sysdate AND sal > 2000;
예) SELECT /*+ INDEX_SS(e emp_idx) */….
FROM emp e WHERE hiredate = sysdate
이와 반대로 NO_INDEX_SS 힌트는 힌트에서 지정한 테이블의 인덱스에 대해 스킵스캔을 제외한 다른 액세스 방법을 사용하도록 유도한다.
예) SELECT /*+ INDEX_SS_DESC(e ename_ix) */……..
FROM employees e WHERE first_name = 'Steven';