2009년 4월 16일 목요일

자주 사용하는 ORACLE HINT

아래의 HINT를 잘 활용하면 엄청난 속도의 차이를 가져올 수 있다.

RULE : RULE BASE 옵티마이저를 사용.

FISRT_ROWS : 첫째 레코드의 추출시간을 최소화 할 목적으로 최적화.

ALL_ROWS : 모든 레코드를 처리하는 시간의 최소화를 목적으로 최적화.

FULL : 지정된 테이블에 대한 전체 스캔.

ROWID : 지정된 테이블에 대한 ROWID에 의한 테이블 스캔.

CLUSTER : 지정된 테이블에 애한 클러스터 스캔.

HASH : 지정된 테이블에 대한 해쉬 스캔.

INDEX_ASC : 내림차순(순차적)으로 INDEX를 스캔.

INDEX_DESC : 오름차순(역순)으로 INDEX 스캔.

AND_EQUALS : 여러개의 INDEX를 MERGE하여 사용(2~5개).

ORDERED : FROM절에 기술된 테이블 순으로 조인.

USE_NL : 먼저 특정 테이블의 ROW를 엑세스하고 그 값에 해당하는 다른 테이블의 ROW를 찾는 작업을 해당범위가지 실행하는 조인.

USER_MERGE : 먼저 각각의 테이블의 처리범위를 스캔하여 SORT한 후 서로 MERGE하면서 조인하는 방식.

PARALLEL : 병렬처리 프로세스의 개수를 지정.

CACHE : 테이블의 ROW들을 메모리내에 상주.

NOCACHE : 메모리내에 상주(Cache)시킨 옵션의 해제.

MERGE-AJ : 부정형의 조인(Anti-Join)을 소트머지 방식으로 수행.

HASH-AJ : 부정형의 조인을 해쉬조인(Hash-Join) 방식으로 수행.

사용예제.

SELECT /*+ ORDERED */ FROM ORDER1T A, ORDER2T B WHERE ...

이러면 옵티마이저가 스스로 판단하여 테이블 플랜을 만드는 것이 아니라 FROM절에 기술한 순서대로 플랜을 만든다.

이런 식으로 사용을 합니다.

댓글 없음:

댓글 쓰기