펌 : http://such.egloos.com/1472596
+ ALL_ROWS
- /*+ ALL_ROWS */
- 통계 데이터의 유무에 상관없이 Cost-Based 방식의 최적화를 한다. Best Throughput(처리량)이 목적.
+ FIRST_ROWS
- /*+ FIRST_ROWS */
- Cost-Based Optimization, Best Response Time 목적
+ CHOOSE
- /*+ CHOOSE */
- Table, Cluster, Index 등이 Optimization을 위한 통계 데이터를 가지고 있으며 Cost-Based 방식으로 Optimization을 하고 통계 데이터가 없으면
Rule-Based 방식으로 한다.
+ RULE
- /*+ RULE */
- 한 SQL문 block에 대해 rule-based optimization을 선택.
+ FULL
- /*+ FULL(table) */
- 테이블에 대해 full table scan을 선택
+ ROWID
- /*+ ROWID(table) */
- 테이블에 대해 ROWID에 의한 table scan을 선택
+ CLUSTER
- /*+ CLUSTER(table) */
- Cluster Scan을 선택하도록 지정한다. 따라서 clustered object들에만 적용된다
+ HASH
- /*+ HASH(table) */
- CLUSTER 에 저장된 TABLE에만 적용됨, 테이블에 대해 HASH scan을 선택.
+ HASH_AJ
- /*+ HASH_AJ */
- a NOT IN subquery -> a hash anti-join 으로 transformation.
+ HASH_SJ
- /*+ HASH_SJ */
- a correlated EXISTS subquery -> a hash semi-join 으로 transformation.
+ INDEX
- /*+ INDEX(table index1 index2 index3 ...) */
- 지정된 index사용하도록 지정한다
- in list predicat에 대해서도 가능.
- Multi-column inlists 는 index 를 사용할 수 없다.
+ INDEX_ASC
- /*+ INDEX_ASC(table index1 index2 index3 ...) */
- INDEX HINT 와 동일, 오름차순으로 사용하도록 지정한다
+ INDEX_DESC
- /*+ INDEX_DESC(table index1 index2 index3 ...) */
- 지정된 index를 내림차순으로 사용하도록 지정한다.
+ INDEX_FFS
- /*+ INDEX_FFS(table index1 index2 index3 ...) */
- fast full index scan
+ MERGE_AJ
- /*+ MERGE_AJ */
- a NOT IN subquery -> a merge anti-join 으로 transformation.
+ MERGE_SJ
- /*+ MERGE_SJ */
- a correlated EXISTS subquery -> a merge semi-join 으로 transformation.
+ AND_EQUAL
- /*+ AND_EQUAL(table index1 index2 ... index5) */
- 적어도 2개 이상의 index를 지정해야 하고, max로 5개까지 지정 가능.
- 몇몇의 single-column index에대한 scan을 merge하는 access path를 사용하는 execution plan을 선택
+ USE_CONCAT
- /*+ USE_CONCAT */
- OR 조건을 UNION ALL set operator를 사용하는 compound query로 변환
- 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
- /*+ ORDERED */
- FROM절에 table이 나타나는 순서대로 테이블을 join시킨다.
+ STAR
- /*+ STAR */
+ USE_NL
- /*+ USE_NL(table1 table2 ...) */
- 테이블을 적는 부분에 테이블 기술된 table은 inner table로서 사용하여 nested loops로서 다른 테이블의 row source와 기술된 table을 join하게 한다.
- 지정된 table이 inner table이 된다. ( inner table <-> driving(outer) table )
- 흔히 ORDERED Hint와 함께 쓴다.
cf) Tuning reference guide 에 의하면 use_nl과 use_merge 는 모두 ordered hint 와 함께 사용되어져야 하며, 오라클은 이 hint 가 inner table 인 경우 사용되어진다고
언급하고 있습니다.
+ USE_MERGE
- /*+ USE_MERGE(table1 table2 ...) */
- 오라클이 sort-merge join으로 각 테이블을 조인하게끔 하는 방법이다.
+ USE_HASH
- /*+ USE_HASH(table1 table2 ...) */
+ DRIVING_SITE
- query execution이 행해진다.
- rule/cost-based 모두 가능.
+ CACHE
- /*+ CACHE(table) */
- full table scan이 수행됐을 때 hint에 있는 테이블에 대해 retrieve된 블록들은 버퍼 캐시에 있는 LRU list의 가장최근(most recently)에 사용되어진 것의 끝에 위치.
- full table scan시 retrieve된 block을 LRU list에서 most recently used end에 놓는다. 즉, memory에 오래 존재하게 한다.
+ NOCACHE
- /*+ NOCACHE(table) */
- full table scan이 수행됐을 때 hint에 있는 테이블에 대해 retrieve된 블록들은 버퍼 캐시에 있는 LRU list의 가장 오래전(least recently)에 사용되어진 것의 끝에 위치
- full table scan시 retrieve된 block을 LRU list에서 least recently used end에 놓는다. 즉, memory에서 금방 내려가게 한다.
+ MERGE
- /*+ MERGE(view) */
- COMPLEX_VIEW_MERGING = FALSE 로 되어 있을 때
- view 또는 subquery의 내용을 merge가능.
+ NOMERGE
- /*+ NOMERGE(view) */
- COMPLEX_VIEW_MERGING = TRUE 로 되어 있을 때 사용
- view 또는 subquery의 내용을 merge불가능.
- view 또는 subquery자체의 query문에 의한 영향을 많이 받게됨.
+ PUSH_JOIN_PRED
+ NO_PUSH_JOIN_PRED
+ PUSH_SUBQ
- /*+ PUSH_SUBQ */
- nomerged subqueries가 execution plan에서 가능한 가장 빠른 위치에서 evaluation되도록 한다.
- 일반적으로, merge되지 않은 subqueries는 execution plan에서 마지막 step으로써 수행된다. subqueries가 상대적으로 inexpensive하고 rows의 수를 줄일 수 있다면, subqueries를 더 일찍 evaluation하는 것이 performance를 향상시킬 것이다.
- subquery가 remote table에 적용되거나, merge join을 사용하는 join된 table에 적용된다면 이 hint는 적용되지 않는다.
+ STAR_TRANSFORMATION
- /*+ START TRANSFORMATION */
'Java Programming > DB(Oracle, My-Sql)' 카테고리의 다른 글
DB 튜닝 - INDEX 제대로 사용하기 (0) | 2018.07.20 |
---|---|
[Oracle]Toad for Oracle_데이터 수정 (1) | 2014.07.28 |
[Oracle]서브쿼리 조인해서 UPDATE (0) | 2014.03.16 |
쿼리문(서브쿼리..) (0) | 2013.06.28 |
쿼리문(제약조건..) (0) | 2013.06.28 |