DataBase/Oracle

Oracle 힌트 문 정리 (ALL_ROWS, RULE, ROWID, INDEX)

개발자 DalBy 2024. 5. 14. 15:48
반응형

ALL_ROWS

SELECT /*+ALL_ROWS */
       COL1
     , COL2
  FROM TABLE
 WHERE COL = '';

 

전체 RESOURCE 최소화 시키기 위한 힌트이다.

비용기반 (Cost-Based 접근)

 

 

FIRST_ROWS

SELECT /*+FIRST_ROWS */
       COL1
     , COL2
  FROM TABLE
 WHERE COL1 = ''

조건에 맞는 첫번째 row를 반환 Resource 소비 최소화 힌트이다.

비용기반 (Cost-Based 접근)

 

 

CHOOSE

SELECT /*+CHOOSE */
       COL1
     , COL2
  FROM TABLE
 WHERE COL1 = '';

acess되는 테이블에 통계치 존재 여부에 따라 Optimizer로

Rule-Based Approach와 Cost-Based Approach 중 하나를 선택할 수 있게 한다.

 

 

 

RULE

SELECT /*+RULE */
       COL1
     , COL2
  FROM TABLE
 WHERE COL1 = '';

규칙기반 (Rule-Based) 최적화

 

 

FULL

SELECT /*+FULL(TABLE) */
       COL1
     , COL2
  FROM TABLE
 WHERE COL1 = '';

해당 테이블의 Full Table Scan

 

 

ROWID

/*+ ROWID(TABLE) */

지정된 테이블의 ROWID를 이용한 Scan(가장 빠른 Access 방식)

 

 

CLUSTER

SELECT /*+CLUSTER(TABLE T1) */
       T1.COL1
     , T1.COL2
FROM TABLE T1, TABLE T2
WHERE T1.COL1 = ''
  AND T1.COL2 = T2.COL2;

지정된 테이블Access에 Cluster Scan 유도. Cluster된 Objects에만 적용 가능하다.

 

 

HASH

/*+HASH(TABLE) */

지정된 테이블Access에 HASH Scan 유도한다.

 

 

HASH_AJ

/*+HASH_AJ */

Not in SubQuery 를 HASH Anti-join으로 변형

 

 

HASH_SJ

/*+HASH_SJ */

Correlated Exists Subquery 를 Hash Semi-join으로 변형

 

 

INDEX

/*+INDEX(TABLE COL1_INDEX) */

지정된 테이블access에 Index Scan 유도, 하나의 Index만 지정되면 Optimizer는 해당index를 이용

여러개의 인덱스가 지정되면 Optimizer가 각 Index의 Scan시 Cost를 분석 한 후 최소비용이 드는 Index사용

경우에 따라 여러 Index 사용 후 결과를 Merge하는 Acees방식도 채택

Index가 지정되지 않으면 Optimizer는 테이블의 이용가능한 모든 Index에 대해 Scan Cost를 고려 후 최저비용이 드는 Index Scan을 진행한다.

 

 

INDEX_FFS

/*+INDEX_FFS(TABLE INDEX) */

Full Scan보다 빠른 Full Index Scan을 유도한다.

 

 

ORDERED

/*+ORDERED */

FROM절에 기술된 테이블 순서대로 JOIN이 되도록 유도한다.

 

 

 

반응형