오라클 힌트 사용예
오라클 힌트란
?
⑴ 개요
힌트는 SQL 튜닝의 핵심부분으로 일종의 지시구문이다
SQL
에 포함되어 쓰여져 Optimizer의 실행 계획을 원하는 대로 바꿀 수 있게 해준다. 오라클 Optimizer라고 해서 항상의
최선의 실행 계획을 수립할 수는 없으므로 테이블 이나 인덱스의 잘못된 실행 계획을 개발자가 직접 바꿀 수 있도록 도와주는
것이다. 사용자는 특정 SQL 문장에서 어떤 인덱스가 선택도가 높은지에 대해 알고 있는데 이 경우 오라클 서버의
Optimizer에 의존하여 나온 실행 계획보다 훨신 효율적인 실행계획을 사용자가 구사할 수 있다.
⑵ 사용법
힌트를 사용하여 아래와 같은 것들을 할 수 있다.
액세스 경로, 조인순서, 병렬 및 직렬처리 ,Optimizer의 목표(Goal)를 변경 가능
⑶ 형태
SQL 문장 내에 [/*+ 힌트 내용 */] 이 추가된다.
주의! 주석 표시에 더하기(+)가 있다.
--------------------------------------------------
select /*+ index( idx_col_1 ) */
name, age, hobby
from member
--------------------------------------------------
*오라클 힌트 사용표
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 수행 못하게 함 |