2010년 9월 6일 월요일

[oracle] hints #1

 

힌트 사용 권고 : 힌트는 Join 순서 -> Join 방법 -> 데이터 접근 방식 순으로 사용하는 것을 권장함.

힌트 구분 힌트 내용2 기타
접근방법 /*+  ALL_ROWS  */ CBO mode. 총 자원 소비량 최소화  
/*+  CHOOSE */ Optimizer 가 RBO 나 CBO 선택하도록 함.  
/*+  FIRST_ROWS */ CBO mode. 첫번째 행을 반환하는데 최소화  
/*+  RULE */ RBO mode 선택  
엑세스메소드 /*+  AND_EQUAL(table  index1
                                index2)  */
인덱스 병합을 명시. AND_EQUAL(table index1 index2 ... index5)
적어도 2개 이상의 index를 지정해야 하고, max로 5개까지 지정 가능
 
/*+  CLUSTER (table)              */ Cluster Scan 명시  
/*+  FULL(table)                     */ Full Scan 명시  
/*+  HASH(table)                     */ Hash Scan을 명시적으로 선택  
/*+  HASH_AJ(table)                 */ NOT In sub Query 를 hash
anti join으로 변환하여 table 엑세스
 - Not in, Not exists
/*+  HASH_SJ(table)                */ Exists sub Query 를 hash
semi join으로 변환하여 table 엑세스
 - Exists
/*+  INDEX(table index)            */ 테이블 인덱스 사용  
/*+  INDEX_ASC(table index)     */ 테이블에 대한 오름차순 인덱스 스캔  
/*+  INDEX_COMBINE (table index)*/ 비트맵 인덱스의 부울 조합을 사용  
/*+  INDEX_DESC(table index)   */ 테이블에 대한 내림차순 인덱스 스캔  
/*+  INDEX_FFS(table index)      */ Full Table Scan 대신
Fast Full Index  Scan 수행
Index Fast full scan, Multiblock_read_count 파람에 영향을 받는다.
/*+  MERGE_AJ(table)              */ Not In 하위 질의를 병합 Anti Join  
/*+  MERGE_SJ(table)              */ 상호 관련된 Exists Sub Query 를
 Semi Join 으로 변환
 
/*+  NO_EXPAND                    */ Where 절에 OR 또는 IN 조건을 가지는
 Query에 대해 OR 확장을 안함 
use_concat 의 반대..OR 나 IN 을 확장안함. table 이나 view 필요없음
/*+  NO_INDEX(table index)       */ 인덱스를 지정하지 않으면 해당
Table 에 대해 Index 를 전혀 사용치 않음
 
/*+  NOREWRITE                     */ Query_rewrite_enable = true 를 비활성화  
/*+  ORDERED_PREDICATES     */ 술어 평가 순서를 Select 문의
 Where 절에 지정된 대로 보존
 
/*+  REWRITE(view [ , , ])        */ 질의를 재작성  
/*+  ROWID(table)                   */ Rowid 에 의한 테이블 스캔을 명시  
/*+  USE_CONCAT                  */ Union all 집합 연산자를 사용하여
질의의 Where 절에 있는 결합된
OR 조건을 혼합질의로 변환
combined OR conditions -> a compound query using
the UNION ALL set operator 로 transformation 한다.
- 일반적으로, 이 transformation은 다음과 같은 상황에서
   발생. if concatenations을 사용하는 query의 cost가 그렇지
   않는 cost보다 더 작을 때.
-  inlists processing과 OR-expands all disjunctions를 turns off
조인순서 /*+  ORDERED                   */ From 절 순서대로 Access  - From 절 순서대로 Join 됨. (CBO 의 default 도 from 절 기술 순서대로)
/*+  STAR                          */    - Dimension Table 들의 Cartecian Product 이 생성된 후 Fact table 과의 조인
조인연산 /*+  DRIVING_SITE(table)      */ Remote Site 에서 수행되도록 함.   - 해당 DB 에서 query execution이 행해진다.
  - rule/cost-based 모두 가능.
/*+ LEADING ( table )           */ driving table 선정  
/*+  USE_HASH(table)          */ Hash Join 방식 Join  
/*+  USE_MERGE(table)       */ Sort Merge 방식 Join 흔히 ORDERED Hint와 함께 쓴다.
/*+  USE_NL(table)              */ Nested Loop 방식 Join   - 지정된 table이 inner table이 된다.
     ( inner table <-> driving(outer) table )
  - 흔히 ORDERED Hint와 함께 쓴다.
병렬실행 /*+  APPEND                      */ Insert 키워드 다음에만 사용
/*+ APPEND PARALLEL(T,4)*/
 - 데이터가 단순히 Table의 HWM 이후에 추가
 - 이것은 Redo 를 남기지 않으므로 주의하여 사용바람. 또한 Transaction 종료전에는 자신의 session에서도 Record 확인 불가. 왜냐하면, HWM 이후에 존재하므로…별도의 Segment 에..
/*+  NOAPPEND                 */    
/*+  NOPARALLEL(table)      */ Table 이 parallel 로 되어 있을 경우, Parallel 을 Disable  
/*+  PARALLEL(table)          */ Parallel 처리 parallel 지정시 degree 를 지정하지 않으면, CPU * parallel_threads_per_cpu
만큼의 degree 가 된다
/*+  PARALLEL(table, integer)*/ integer를 지정하지 않으면,
Parallel_threads_per_cpu 매개변수를 계산
DML 일 경우 Parallel 활성 모드에서만 실행
" ALTER SESSION ENABLE PARALLEL DML ; "
/*+  PARALLEL_INDEX         */ /*+ PARALLEL_INDEX(table1, index1, 3, 1) +/  
/*+  PQ_DISTRIBUTE (table,
      outer_distribution,  
      inner_distribution )        */
조인된 테이블의 행을 분산하는
방법 지정
 
/*+  NOPARALLEL_INDEX   */ 인덱스에 대한 Parallel 속성 설정  
기타 /*+  CACHE(table)              */     - full table scan시 retrieve된 block을 LRU list에서
    most recently used end에 놓는다.
    즉, memory에 오래 존재하게 한다.
/*+  NOCACHE(table)          */     - full table scan시 retrieve된 block을 LRU list에서
    least recently used end에 놓는다.
    즉, memory에서 금방 내려가게 한다.
/*+  MERGE(table)             */ 주변 Query 전에 복잡한 뷰나
Sub Query를 평가
  - _COMPLEX_VIEW_MERGING = FALSE 로 되어 있을 때
  - view 또는 subquery의 내용을 merge가능.
/*+  NO_MERGE (view 명)   */
/*+  NOMERGE(view 명)     */
뷰 병합 방지   - _COMPLEX_VIEW_MERGING = TRUE 로 되어 있을 때 사용
  - view 또는 subquery의 내용을 merge불가능.
  - view 또는 subquery자체의 query문에 의한 영향을 많이 받게됨.
/*+  PUSH_PRED(table)  8.1.7     */ 개별 조인 술어를 뷰에 넣는지의
여부를 비용에 준하여 평가
 -  view 안으로 외부 조인 조건을 Pushing 한다. 
/*+  PUSH_JOIN_PRED(table)       */  -  view 안으로 외부 조인 조건을 Pushing 한다. 
/*+  NO_PUSH_PRED(table)  8.1.7*/  조인 술어를 뷰에 넣지 못하도록 함.  -  view 안으로 외부 조인 조건을 Push 하지 않는다. 
/*+  NO_PUSH_JOIN_PRED(table)  */  -  view 안으로 외부 조인 조건을 Push 하지 않는다. 
/*+  PUSH_SUBQ */ 병합되지 않은 Sub Query를 우선적용

이건 view 이름이 필요치 않다.
  - nomerged subqueries가 execution plan에서 가능한 가장
    빠른 위치에서 evaluation되도록 한다.
  - 일반적으로, merge되지 않은 subqueries는
     execution plan에서 마지막 step으로써 수행된다.
    subqueries가 상대적으로 inexpensive하고 rows의
    수를 줄일 수 있다면, subqueries를 더 일찍
    evaluation하는 것이 performance를 향상시킬 것이다.
  - subquery가 remote table에 적용되거나, merge join을
    사용하는 join된 table에 적용된다면 이 hint는 적용되지 않는다.
/*+ ORDERED_PREDICATES */    
/*+  STAR                            */    
/*+  STAR_TRANSACTION       */ 변환된 Star Join  

[출처] 힌트 사용|작성자 날씨맑음

2010년 9월 1일 수요일

[oracle] hint #1

 
힌트의 사용법
 
{SELECT | INSERT | UPDATE | DELETE} /*+ hint [text] [hint [text]] ... */
혹은
{SELECT | INSERT | UPDATE | DELETE} --+ hint [text] [hint [text]] ...
 
-         이러한 힌트의 사용은 SQL 전체가 아닌 쓰여진 SQL 블럭에만 적용됩니다.
 
 
힌트의 종류 별 분류
Optimization Goals and Approaches
             ALL_ROWS 혹은 FIRST_ROWS
             CHOOSE
             RULE
 
Acess Method Hints
             AND_EQUAL
             CLUSTER
             FULL
             HASH
             INDEX 혹은 NO_INDEX
             INDEX_ASC 혹은 INDEX_DESC
             INDEX_COMBINE
             INDEX_FFS
             ROWID
 
Join Order Hints
             ORDERED
             STAR
 
Join Operation Hints
             DRIVING_SITE
             HASH_SJ, MERGE_SJ 혹은 NL_SJ
             LEADING
             USE_HASH 혹은 USE_MERGE
             USE_NL
Parallel Execution Hints
             PARALLEL 혹은 NOPARALLEL
             PARALLEL_INDEX
             PQ_DISTRIBUTE
             NOPARALLEL_INDEX
 
Query Transformation Hints
             EXPAND_GSET_TO_UNION
             FACT 혹은 NOFACT
             MERGE
             NO_EXPAND
             NO_MERGE
             REWIRTE 혹은 NOREWRITE
             STAR_TRANSFORMATION
             USE_CONCAT
 
Other Hints
             APPEND 혹은 NOAPPEND
             CACHE 혹은 NOCACHE
             CURSOR_SHARED_EXACT
             DYNAMIC_SAMPLING
             NESTED_TABLE_GET_REFS
             UNNEST 혹은 NO_UNNEST
             ORDERED_PREDICATES
  
힌트의 설명 및 사용법
 
ALL_ROWS
             /*+ ALL_ROWS */
-         최소한의 자원을 사용하여 결과값의 전체를 추출하게 합니다.
 
AND_EQUAL
             /*+ AND_EQUAL (table index index [index] [index] [index] ) */
-         복수의 단일 컬럼을 스캔하여 머지 방식으로 처리하게 합니다.
 
APPEND_HINT
             /*+ APPEND */
-         직렬 모드 데이터베이스에서 Direct INSERT를 실행하게 합니다.
-         Enterprise Edition 이 아닌 데이터베이스의 기본 모드는 직렬 모드입니다. 이러한 직렬 모드 데이터 베이스에서의 INSERT 작업은 Conventional를 기본값으로 하고 병렬 처리 시에는 Direct INSERT를 기본값으로 합니다.
 
CACHE_HINT
             /*+ CACHE (table) +/
-         풀 테이블 스캔의 사용 시, 테이블에서 읽어온 블럭을 버퍼의 LRU 리스트 의 MRU 쪽에 위치시킵니다. 작은 테이블의 사용 시 유용합니다.
 
CHOOSE_HINT
             /*+ CHOOSE +/
-         Rule-Based 와 Cost-Based 방식 간의 선택을 유도합니다. 선택 기준은 사용 객체의 분석 정보 존재 여부이며, 사용되는 객체들중 하나라도 분석 정보가 존재한다면 Cost-Based 방식을 사용하게 됩니다.
 
CLUSTER_HINT
             /*+ CLUSTER (table) +/
-         지정 테이블의 클러스터 스캔을 유도합니다. 클러스터된 객체에만 사용할 수 있습니다.
 
CURSOR_SHARING_EXACT
             /*+ CURSOR_SHARING_EXACT +/
-         바인드 변수 값의 교체를 불가능하게 합니다.
-         기본적으로 CURSOR_SHARING 파라미터를 사용하여, 안전하다고 판단될 시 SQL 내의 바인드 변수 값을 교체할 수 있게 되어 있습니다.
 
DRIVING_SITE
             /*+ DRIVING_SITE (table) +/
-         오라클이 선택한 SITE 대신, 지정한 SITE를 사용하여 쿼리를 실행합니다. Rule-Based 와 Cost-Based, 두 모드 다 사용 가능합니다.
 
DYNAMIC_SAMPLING
             /*+ DYNAMIC_SAMPLING ( [table] n ) +/
-         해당 객체의 Selectivity 와 Cardinality 에 대한 보다 자세한 정보를 자동으로 생성시켜 실행합니다.
-         값은 0 부터 10 까지 지정할 수 있으며, 높을 수록 보다 자세한 정보를 생성하게 됩니다. 테이블에 해당 값을 지정하지 않았을 경우, 기본 값은 CURSOR 레벨의 값이 쓰여집니다.
 
EXPAND_GSET_TO_UNION
             /*+ EXPAND_GSET_TO_UNION +/
-         GROUP BY GROUPING SET 혹은 GROUP BY ROLLUP 등과 같은 구문을 포함하는 쿼리에 사용할 수 있습니다.
-         이 힌트는 기존의 쿼리를 개별적인 그룹 생성 후, UNION ALL 방식으로 실행되게 유도합니다.
 
FACT_HINT
             /*+ FACT (table) +/
-         스타 변형 구문에서 사용되며 해당 테이블이 FACT 테이블로 사용되게 유도합니다.
 
FIRST_ROWS
             /*+ FIRST_ROWS (n) +/
-         전체 결과값의 반환 대신 지정한 숫자만큼 로우의 결과값을 반환하는데 집중하게 유도합니다.
 
FULL_HINT
             /*+ FULL (table) */
-         지정한 테이블에 대해 풀 테이블 스캔을 유도합니다.
 
HASH_HINT
             /*+ HASH (table) */
-         지정한 테이블에 대해 hash 스캔을 수행하도록 유도합니다.
-         클러스터 테이블 만을 대상으로 합니다.
 
HASH_AJ
             /*+ HASH_AJ */
-         EXISTS 구문 뒤에 오는 서브 쿼리에 사용되며 HASH_SJ, MERGE_SJ 혹은 NL_SJ 등을 사용할 수 있습니다.
-         HASH_SJ 은 hash semi-join 이고, MERGE_SJ 은 sort merge semi-join 이며 NL_SJ 은 nested loop semi-join 입니다.
 
INDEX
             /*+ INDEX (table index [index] [index] ... ) */
-         지정한 테이블의 인덱스 스캔을 실행하도록 유도합니다.
-         Domain, B-tree, bitmap, bitmap join 인덱스 등이 사용될 수 있으나, bitmap 인덱스 들의 사용 시, INDEX 힌트보다는 INDEX_COMBINE 힌트 사용이 추천됩니다.
 
INDEX_ASC
             /*+ INDEX-ASC (table [index] [index] ... ) +/
-         해당 테이블의 인덱스를 순차적 방식으로 스캔하게 합니다.
-         해당 쿼리가 인덱스 범위 스캔의 사용 시, 인덱스 값의 순차적 방식으로 읽게 됩니다.
 
INDEX_COMBINE
             /*+ INDEX_COMBINE (table [index] [index] ... ) +/
-         해당 테이블에 Bitmap 인덱스의 존재 시, Bitmap 인덱스를 통한 액세스를 유도합니다.
-         힌트 내에 인덱스의 이름이 쓰여지지 않을 시, 해당 인덱스의 Boolean 값을 사용하여 최적의 Cost를 산출하여 실행하게 됩니다.
 
INDEX_DESC
             /*+ INDEX_DESC (table [index] [index] ... ) +/
-         지정한 인덱스에 대해 인덱스 스캔을 역순으로 실행합니다.
-         해당 쿼리가 인덱스 범위 스캔의 사용 시, 인덱스 컬럼의 값을 사용하여 역순으로 실행합니다.
-         파티션 인덱스에서는 파티션 별 개별적인 실행이 이루어집니다.
 
INDEX_FFS
/*+ INDEX_FFS (table [index] [index] ... ) +/
-         풀 테이블 스캔 대신에 빠른 풀 테이블 스캔의 실행을 유도합니다.
 
LEADING_HINT
             /*+ LEADING (table) +/
-         테이블 간의 조인 시에 지정한 테이블을 먼저 수행하도록 유도합니다.
-         두 개 이상의 LEADING 힌트의 사용 시, 힌트 자체가 사용되어 지지 않습니다.
-         ORDERED 힌트와 더불어 사용시, LEADING 힌트는 사용되지 않습니다.
 
MERGE
             /*+ MERGE (table) +/
-         각 쿼리의 결과값을 머지합니다.
-         해당 쿼리 내에 GROUP BY 절의 사용 이나 SELECT 구문에 DISTINCT 가 사용되었을 시, 머지의 실행이 가능할 경우에만 힌트가 실행됩니다.
-         IN 과 서브 쿼리의 사용 시, 서브 쿼리와 상위 쿼리 간의 상호 관계가 없을 때에만 머지의 실행이 가능합니다.
-         이 힌트는 Cost-based 가 아닙니다. 따라서 액세스하는 실행 쿼리 블럭에 MERGE 힌트가 반드시 명시되어야만 합니다. 그렇지 않을 경우 옵티마이저는 다른 실행 계획을 수립합니다.
 
MERGE_AJ
             HASH_AJ 를 참조하십시요.
 
MERGE_SJ
             HASH_AJ 를 참조하십시요.
 
NL_AJ
             HASH_AJ 를 참조하십시요.
 
NL_SJ
             HASH_AJ 를 참조하십시요.
 
NOAPPEND
             /*+ NOAPPEND +/
-         병럴 모드에서의 INSERT 작업을 Conventional 방식으로 수행합니다.
-         병렬 모드에서는 Direct-path INSERT 가, 직렬 모드에서는 Conventional INSERT가 기본값입니다.
 
NOCACHE
             /*+ NOCACHE (table) +/
-         풀 테이블 스캔의 사용 시, 테이블에서 읽어온 블럭을 버퍼의 LRU 리스트 의 LRU 쪽에 위치시킵니다. 기본 모드입니다.
 
NO_EXPAND
             /*+ NO_EXPAND +/
-         실행 쿼리 내에 OR 나 WHERE 절의 IN 이 사용되었을 시, Cost-Based 옵티마이저가 쿼리 처리를위해 OR 를 사용한 확장을 사용하는 것을 방지합니다.
-         일반적으로 옵티마이저는 위와 같은 경우 OR – 확장의 가격이 확장을 사용하지 않는 것보다 적을 시, 확장 방식으로 수행합니다.
 
NO_FACT
             /*+ NO_FACT (table) +/
-         Star 변형 시, 해당 테이블의 FACT 테이블로서의 사용을 방지합니다.
 
NO_INDEX
             /*+ NO_INDEX (table [index] [index] ... ) +/
-         지정 테이블의 인덱스 사용을 방지합니다.
 
NO_MERGE
             /*+ NO_MERGE (table) +/
-         머지 처리 방식의 사용을 방지합니다.
 
NOPARALLEL
             /*+ NOPARALLEL (table) +/
-         지정한 테이블의 병렬 처리를 방지합니다.
-         테이블의 지정된 PARALLEL 값에 대해서 우선권을 가집니다.
-         중첩 테이블에 대해서는 병렬 처리를 할 수 없습니다.
 
NOPARALLEL_INDEX
             /*+ NOPARALLEL_INDEX (table [index] [index] ... ) +/
-         인덱스 스캔 작업의 병렬 처리를 방지합니다.
-         인덱스에 지정된 PARALLEL 값에 우선권을 가집니다.
 
NO_PUSH_PRED
             /*+ NO_PUSH_PRED (table) +/
-         결과값에 대한 조인 방식 서술의 강제적 수행을 방지합니다.
 
NO_PUSH_SUBQ
             /*+ NO_PUSH_SUBQ +/
-         서브 쿼리의 결과값을 머지하지 않는 실행 계획이 실행 계획 설립 단계에서 제일 마지막으로 참조되는 것을 방지합니다.
-         일반적으로 서브 쿼리의 Cost 가 높거나, 처리 로우의 갯수를 크게 줄여주지 못할 때에는 서브 쿼리를 마지막에 참조하는 것이 성능 향상에 도움이 됩니다.
 
NOREWRITE
             /*+ NOREWRITE +/
-         해당 쿼리 블럭의 쿼리 재생성의 실행을 방지합니다.
-         QUERY_REWRITE_ENALBE 파라미터에 대해 우선권을 가집니다.
-         NOREWRITE 힌트의 사용 시, Function-Based 인덱스의 사용이 금지됩니다.
 
NO_UNNEST
             /*+ NO_UNNEST +/
-         해당 서브 쿼리 블럭의 UNNESTING 설정의 사용을 방지합니다.
 
ORDERED
             /*+ ORDERED +/
-         FROM 절에 나열된 테이블의 순서대로 조인 작업을 실행합니다.
 
ORDERED_PREDICATE
             /*+ ORDERED_PREDICATE +/
-         옵티마이저에 의한 조인 관계의 Cost를 산출하기 위해 미리 정해둔 조인 관계 별 실행 순서의 사용을 방지합니다.
n         인덱스 키를 사용한 조인 관계들은 제외됩니다.
-         이 힌트는 쿼리의 WHERE 절에 사용하십시요.
 
PARALLEL
             /*+ PARALLEL (table [ [, n |, DEFAULT |, ] [, n | DEFAULT ] ] ) +/
-         병렬 처리에 사용될 서버 프로세스의 갯수를 설정합니다.
-         병렬 처리 조건에 위배될 시, 힌트는 사용되지 않습니다.
-         임시 테이블에 대한 PARALLEL_HINT 사용 시, 힌트는 사용되지 않습니다.
 
PARALLEL_INDEX
             /*+ PARALLEL_INDEX (table [ [index] [, index]...]
[ [, n |, DEFAULT |, ] [, n | DEFAULT ] ] ) +/
-         파티션 인덱스의 인덱스 범위 스캔 작업의 병렬 처리에 할당될 서버 프로세스의 갯수를 지정합니다.
 
PQ_DISTRIBUTE
             /*+ PQ_DISTRIBUTE (table [,] outer_distribution, inner_distribution) +/
-         병렬 조인 시, Producer 프로세스와 Consumer 프로세스 간의 데이터 전달 방식을 지정합니다.
 
PUSH_PRED
             /*+ PUSH_PRED (table) +/
-         결과값에 대한 조인 방식 서술의 강제적 수행을 실행합니다.
 
PUSH_SUBQ
             /*+ PUSH_SUBQ +/
-         머지가 불가능한 서브 쿼리들의 우선 실행 계획을 실행 계획 수립시 먼저 참조하도록 합니다.
-         서브 쿼리의 사용 객체가 Remote 테이블이거나, 머지 조인의 사용 시 힌트는 실행되지 않습니다.
 
REWRITE
             /*+ REWRITE [ ( [materialized_view] [materialized_view]...) ] +/
-         실행 계획의 가격에 상관없이 Materialized View 를 사용하여 쿼리 재생성을 하도록 합니다.
-         Materialized View 를 지정할 시, 지정한 Materialized View 의 가격에 상관없이 무조건 쿼리 재생성을 실행합니다.
-         Materialized View 를 지정하지 않을 시, 오라클은 사용 가능한 모든 Materialized View 를 참조하여 그 중 가장 가격이 낮은 Materialized View 를 사용하여 쿼리 재생성을 합니다.
-         Materialized View 를 지정하지 않는 힌트의 사용이 권장됩니다.
 
ROW_ID
             /*+ ROWID (table) +/
-         지정한 테이블의 스캔을 ROWID 방식으로 수행하게 합니다.
 
RULE
             /*+ RULE +/
-         실행 계획을 Rule-Based 방식으로 실행하게 합니다.
-         해당 쿼리 블럭에 다른 힌트 또한 사용되었을 경우, 다른 힌트들은 사용되지 않습니다.
 
STAR
             /*+ STAR +/
-         Star 쿼리 계획이 사용 가능하다면, 실행하게 합니다.
-         Star 쿼리 계획이란 가장 큰 테이블이 마지막 순서로 조인되며, 조인될 시 가장 큰 테이블 내의 Concatenated 인덱스에 대해 Nested Loop 조인 방식으로 실행되는 것을 말합니다.
-         최소한 세개 이상의 테이블이 사용되며, 제일 큰 테이블의 Concatenated 인덱스의 생성에 최소한 세 개 이상의 컬럼이 사용되어야 하며, 액세스나 조인 방식에 충돌이 없어야만 이 힌트는 사용됩니다.
 
STAR_TRANSFORMATION
             /*+ STAR_TRANSFORMATION +/
-         옵티마이저가 Star 변형 작업에 최적화된 실행 계획을 수립, 실행하도록 합니다.
-         힌트를 사용하지 않을 시, 옵티마이저는 일반적인 작업에 최적화된 실행 계획을 수행합니다.
-         힌트를 사용하였어도 변형 작업에 맞추어진 실행 계획을 실행한다는 보장은 없습니다. 다른 일반적인 힌트의 사용과 마찬가지로 비교 분석 후, 오라클의 판단에 따라 다른 실행 계획이 실행될 수 있습니다.
 
UNNEST
             /*+ UNNEST +/
-         서브 쿼리 블럭에 대해 인증성 만을 검사하게 합니다.
-         인증이 되었다면 그 이상의 검증 작업없이 서브쿼리에 대한 UNNESTING 의 설정을 가능하게 합니다.
 
USE_CONCAT
             /*+ USE_CONCAT +/
-         WHERE 절의 OR 조인 을 UNION ALL 로 변경하여 수행하게 합니다.
-         일반적으로 이러한 변경은 결과값의 병합 수행의 가격이 수행하지 않을 시의 가격 보다 낮을 때에만 실행됩니다.
 
USE_HASH
             /*+ USE_HASH (table [table]...) +/
-         Hash 조인 방식으로 각 테이블을 조인하게 합니다.
 
USE_MERGE
             /*+ USE_MERGE (table [table]...) +/
-         Sort-Merge 방식으로 각 테이블을 조인하게 합니다.
 
USE_NL
             /*+ USE_NL (table [table]...) +/
- Nested-Loop 방식으로 각 테이블을 조인하게 합니다