오라클 힌트(oracle hint)
오라클 힌트란?
1) 개요
힌트는 SQL 튜닝의 핵심부분으로 일종의 지시구문이다. SQL에 포함되어 쓰여져 Optimizer의 실행 계획을 원하는 대로 바꿀 수 있게 해준다. 오라클 Optiomizer라고 해서 항상 최선의 실행 계획을 수립할 수는 없으므로 테이블이나 인덱스의 잘못된 실행 계획을 개발자가 직접 바꿀 수 있도록 도와주는 것이다.
사용자는 특정 SQL 문장에서 어떤 인덱스가 선택도가 높은지에 대해 알고 있는데 이 경우 오라클 서버의 Optimizer에 의존하여 나온 실행 계획보다 훨씬 효율적인 실행계획을 사용자가 구사할 수 있다.
2) 사용법
힌트를 사용하여 아래와 같은 것들을 할 수 있다.
액세스 경로, 조인 순서, 병렬 및 직렬처리, Optiomizer의 목표(Goal)를 변경 가능
3) 형태
SQL 문장 내에 “/*+ 힌트내용 */”이 추가된다.
주의! 주석 표시에 더하기(+)가 있다.
예1)
SELECT /*+ index( idx_col_1 ) */
name, age, hobby
FROM member
예2)
INSERT /*+APPEND*/ INTO TEST00 …
예3)
INSERT /*+PARALLEL*/ INTO TEST00 …
| INDEX ACCESS OPERATION 관련 HINT | ||
| HINT | 내용 | 사용법 |
| INDEX | INDEX를 순차적으로 스캔 | INDEX(TABLE명, INDEX명) |
| INDEX_DESC | INDEX를 역순으로 스캔 | INDEX_DESC(TABLE명, INDEX명) |
| INDEX_FFS | INDEX FAST FULL SCAN | INDEX_FFS(TABLE명, INDEX명) |
| PARALLEL_INDEX | INDEX PARALLEL SCAN | PARALLEL_INDEX(TABLE명,INDEX명) |
| NOPARALLEL_INDEX | INDEX PARALLEL SCAN 제한 | NOPARALLEL_INDEX(TABLE명,INDEX명) |
| AND_EQUALS | INDEX MERGE 수행 | AND_EQUALS(INDEX_NAME, INDEX_NAME) |
| FULL | FULL SCAN | FULL(TALBE명) |
| JOIN ACCESS OPERATION 관련 HINT | ||
| HINT | 내용 | 사용법 |
| USE_NL | NESTED LOOP JOIN | USE_NL(TABLE1, TABLE2) |
| USE_MERGE | SORT MERGE JOIN | USE_MERGE(TABBLE1, TABLE2) |
| USE_HASH | HASH JOIN | USE_HASH(TABLE1, TABLE2) |
| HASH_AJ | HASH ANTIJOIN | HASH_AJ(TABLE1, TABLE2) |
| HASH_SJ | HASH SEMIJOIN | HASH_SJ(TABLE1, TABLE2) |
| NL_AJ | NESTED LOOP ANTI JOIN | NL_AJ(TABLE1, TABLE2) |
| NL_SJ | NESTED LOOP SEMIJOIN | NL_SJ(TABLE1, TABLE2) |
| MERGE_AJ | SORT MERGE ANTIJOIN | MERGE_AJ(TABLE1, TABLE2) |
| MERGE_SJ | SORT MERGE SEMIJOIN | MERGE_SJ(TABLE1, TABLE2) |
| JOIN시 DRIVING 순서 결정 HINT | ||
| HINT | 내용 | |
| ORDERED | FROM 절의 앞에서부터 DRIVING | |
| DRIVING | 해당 테이블을 먼저 DRIVING- driving(table) | |
| 기타 힌트 | ||
| HINT | 내용 | |
| append | insert 시 direct loading | |
| parallel | select, insert 시 여러 개의 프로세스로 수행- parallel(table, 개수) | |
| cache | 데이터를 메모리에 caching | |
| nocache | 데이터를 메모리에 caching하지 않음 | |
| push_subq | subquery를 먼저 수행 | |
| rewrite | query rewrite 수행 | |
| norewrite | query rewrite 를 수행 못함 | |
| use_concat | in절을 concatenation access operation으로 수행 | |
| use_expand | in절을 concatenation access operation으로 수행 못하게 함 | |
| merge | view merging 수행 | |
| no_merge | view merging 수행 못하게 함 | |
출처 1 : http://blog.naver.com/youngram2/220639017128
출처 2 : http://iclickyou.com/845
출처 3 : http://blog.naver.com/wideeyed/80036376623