본문 바로가기

DataBase/Oracle

[펌]오라클힌트1

오라클 힌트 사용예

오라클 힌트란 ?

 

⑴ 개요

    힌트는 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 수행 못하게 함

 

'DataBase > Oracle' 카테고리의 다른 글

파티션 테이블 삭제  (0) 2010.01.05
[펌]오라클 힌트2  (0) 2009.12.30
[펌]오라클 힌트  (0) 2009.12.30
[펌]오라클 분석 함수  (0) 2009.09.03
[펌]오라클 그룹 함수  (0) 2009.09.03