[ORACLE] HINT

Hengki's Oracle 2010. 4. 27. 17:39 |


출처 : http://blog.naver.com/daleena?Redirect=Log&logNo=100053271179



/*+ ALL_ROWS */ 
explicitly chooses the cost-based approach to optimize a statement 
block with a goal of best throughput (that is, minimum 
total resource consumption) 

전체 RESOURCE 소비를 최소화 시키기 위한 힌트.
             Cost-Based 접근방식.


 


/*+ CHOOSE */ 
causes the optimizer to choose between the rule-based 
approach and the cost-based approach for a SQL statement 
based on the presence of statistics for the tables accessed by 
the statement 
             Acess되는 테이블에 통계치 존재여부에 따라 
             Optimizer로 하여금 Rule-Based Approach와 Cost-Based Approach 
             중 하나를 선택할수 있게 한다.
             Data Dictionary가 해당테이블에 대해 통계정보를 가지고 있다면
             Optimizer는 Cost-Based Approach를 선택하고,
             그렇지 않다면 Rule-Based Approach를 선택한다. 



/*+ FIRST_ROWS */ 
explicitly chooses the cost-based approach to optimize a statement 
block with a goal of best response time (minimum 
resource usage to return first row) 
가장 좋은 응답 시간의 목표로 문 블록을 최적화하기 위해 cost-based 접근 
방법을 선택합니다. (첫번째 행을 되돌려 주는 최소의 자원 사용) 

/*+ RULE */ 
explicitly chooses rule-based optimization for a statement 
block 
  Rule-Based 최적화를 사용하기위해. 

/*+ AND_EQUAL(table index) */ 
explicitly chooses an execution plan that uses an access path 
that merges the scans on several single-column indexes 

 single-column index의 merge를 이용한 access path 선택.
             적어도 두개이상의 index가 지정되어야한다.


/*+ CLUSTER(table) */ 
explicitly chooses a cluster scan to access the specified table 
  지정된 테이블Access에 Cluster Scan 유도.
             Cluster된 Objects에만 적용가능.


/*+ FULL(table) */ 
explicitly chooses a full table scan for the specified table 
해당테이블의 Full Table Scan을 유도.


/*+ HASH(table) */ 
explicitly chooses a hash scan to access the specified table 
지정된 테이블Access에 HASH Scan 유도


/*+ HASH_AJ(table) */ 
transforms a NOT IN subquery into a hash antijoin to access 
the specified table 

NOT IN SubQuery 를 HASH anti-join으로 변형


/*+ HASH_SJ (table) */ 
transforms a NOT IN subquery into a hash anti-join to access 
the specified table 

 correlated Exists SubQuery 를 HASH semi-join으로 변형 



/*+ INDEX(table index) */ 
explicitly chooses an index scan for the specified table 
그 명시된 테이블을 위하여, 색인 scan을 고르는 

/*+ INDEX_ASC(table index) */ 
explicitly chooses an ascending-range index scan for the specified 
table 

INDEX HINT와 동일 단,ASCENDING 으로 SCAN함을 확실히 하기위함.



/*+ INDEX_COMBINE(table index) */ 
If no indexes are given as arguments for the INDEX_COMBINE 
hint, the optimizer uses whatever Boolean combination 
of bitmap indexes has the best cost estimate. If particular 
indexes are given as arguments, the optimizer tries to use 
some Boolean combination of those particular bitmap indexes. 

 INDEX명이 주어지지 않으면 OPTIMIZER는 해당 테이블의
             best cost 로 선택된 Boolean combination index 를 사용한다.
             index 명이 주어지면 주어진 특정 bitmap index 의 
             boolean combination 의 사용을 시도한다.



 



/*+ INDEX_DESC(table index) */ 
explicitly chooses a descending-range index scan for the specified 
table 
 지정된 테이블의 지정된 index를 이용 descending으로 scan
             하고자할때 사용.


/*+ INDEX_FFS(table index) */ 
causes a fast full index scan to be performed rather than a full 
table scan 

 full table scan보다 빠른 full index scan을 유도. 


/*+ MERGE_AJ (table) */ 
transforms a NOT IN subquery into a merge anti-join to access 
the specified table 

 not in subquery를 merge anti-join으로 변형 



/*+ MERGE_SJ (table) */ 
transforms a correlated EXISTS subquery into a merge semi-join 
to access the specified table 

correalted EXISTS subquery를 merge semi-join으로 변형



/*+ ROWID(table) */ 
explicitly chooses a table scan by ROWID for the specified 
table 

지정된 테이블의 ROWID를 이용한 Scan 유도


/*+ USE_CONCAT */ 
forces combined OR conditions in the WHERE clause of a 
query to be transformed into a compound query using the 
UNION ALL set operator 

 조건절의 OR 를 Union ALL 형식으로 변형한다.
             일반적으로 변형은 비용측면에서 효율적일때만 일어난다.




/*+ ORDERED */ 
causes Oracle to join tables in the order in which they appear 
in the FROM clause 

from절에 기술된 테이블 순서대로 join이 일어나도록 유도.



/*+ STAR */ 
forces the large table to be joined last using a nested-loops join 
on the index 

 STAR QUERY PLAN이 사용가능하다면 이를 이용하기위한 HINT.
             STAR PLAN은 규모가 가장큰 테이블이 QUERY에서 JOIN ORDER상
             마지막으로 위치하게 하고 NESTED LOOP 으로 JOIN이 일어나도록
             유도한다. 
             적어도 3개 테이블 이상이 조인에 참여해야하며 LARGE TABLE의
             CONCATENATED INDEX는 최소 3컬럼 이상을 INDEX에 포함해야한다.
             테이블이 ANALYZE 되어 있다면 OPTIMIZER가 가장효율적인 STAR PLAN을
             선택한다.     





/*+ DRIVING_SITE (table) */ 
forces query execution to be done at a different site from that 
selected by Oracle 

QUERY의 실행이 ORACLE에 의해 선택된 SITE가 아닌 다른 SITE에서 
             일어나도록 유도.


/*+ USE_HASH (table) */ 
causes Oracle to join each specified table with another row 
source with a hash join 

각 테이블간 HASH JOIN이 일어나도록 유도.



/*+ USE_MERGE (table) */ 
causes Oracle to join each specified table with another row 
source with a sort-merge join 

지정된 테이블들의 조인이 SORT-MERGE형식으로 일어나도록 유도.



/*+ USE_NL (table) */ 
causes Oracle to join each specified table to another row 
source with a nested-loops join using the specified table as the 
inner table 

테이블의 JOIN 시 테이블의 각 ROW가 INNER 테이블을 NESTED LOOP
             형식으로 JOIN 한다.





/*+ APPEND */ , /*+ NOAPPEND */ 
specifies that data is simply appended (or not) to a table; existing 
free space is not used. Use these hints only following the 
INSERT keyword. 
데이타가 테이블로 단순히 덧붙여진다는 (or not)것 명시합니다; 무료인 
현존하는 영역은 사용되지 않습니다. 
단지 그 삽입 키 핵심어를 따르는 이 암시를 사용하시오. 

/*+ NOPARALLEL(table) */ 
disables parallel scanning of a table, even if the table was created 
with a PARALLEL clause 
그 테이블이 PARALLEL 문절로 새로 만들어졌다면 테이블의 평행  순차 검색을 
사용하지 않게 함


/*+ PARALLEL(table, instances) */ 
allows you to specify the desired number of concurrent slave 
processes that can be used for the operation. 
DELETE, INSERT, and UPDATE operations are considered for 
parallelization only if the session is in a PARALLEL DML 
enabled mode. (Use ALTER SESSION PARALLEL DML to 
enter this mode.) 
PARALLEL hint를 사용하면 query에 포함된 table의 degree를 설정할 수 있다. 
예를 들어, 다음과 같이 hint를 적어 degree 4로 parallel query option을 
실행하도록 할 수 있다. 
이 때 parallel이란 글자와 괄호( '(' )사이에 blank를 넣지 않도록 한다. 
select /*+ PARALLEL(emp, 4) */ * from emp; 
 
 

/*+ PARALLEL_INDEX 
allows you to parallelize fast full index scan for partitioned 
and nonpartitioned indexes that have the PARALLEL attribute 
parallelize에 당신에게 빠른 가득한 색인 scan을 허락합니다. 그런데, 
그것은 PARALLEL 속성을 가지고 있는 색인을 분할했고 nonpartitioned했습니다. 

/*+ NOPARALLEL_INDEX */ 
overrides a PARALLEL attribute setting on an index 
병렬이 색인을 나아가는 것을 속하게 하는 대체 


/*+ CACHE */ 
specifies that the blocks retrieved for the table in the hint are 
placed at the most recently used end of the LRU list in the 
buffer cache when a full table scan is performed 
그 블록이 찾아서 가져왔다는 것을 명시합니다. 그리고 그 테이블을 위해 
그 암시에 놓여집니다. 그런데, 그것은 가장 요즈음 사용된 언제 그 버퍼 캐쉬, 
가득한 테이블 scan에 있는 LRU 리스트의 끝입니다. 수행됩니다. 

/*+ NOCACHE */ 
specifies that the blocks retrieved for this table are placed at 
the least recently used end of the LRU list in the buffer cache 
when a full table scan is performed 
그 명시합니다. 그리고, 그 블록은 이 테이블을 위해 검색되면서 요즈음 사용된 
언제 그 버퍼 캐쉬, 가득한 테이블 scan에 있는 LRU 리스트의 가장 작은 끝에 
놓여집니다. 수행됩니다. 

/*+ MERGE (table) */ 
causes Oracle to evaluate complex views or subqueries before 
the surrounding query 
오라클이 그 둘러싸는 질의 전에 복잡한 뷰나 부속 조회를 평가하게 합니다. 

/*+ NO_MERGE (table) */ 
causes Oracle not to merge mergeable views 
오라클이 mergeable 뷰를 합병하지 않게 하지 않습니다 

/*+ PUSH_JOIN_PRED (table) */ 
causes the optimizer to evaluate, on a cost basis, whether or 
not to push individual join predicates into the view 
개개 접합을 미는 것이 그 뷰 안으로 단정 하든 간에 비용 방식으로 최적자가 
평가하게 합니다. 

/*+ NO_PUSH_JOIN_PRED (table) */ 
Prevents pushing of a join predicate into the view 
접합 술부 중에서 그 뷰로 밀면서, 막는 

/*+ PUSH_SUBQ */ 
causes nonmerged subqueries to be evaluated at the earliest 
possible place in the execution plan 
원인은 그 실행 계획에서의 가장 이른 가능한 장소에 평가되는 부속 조회를 
nonmerged했습니다. 

/*+ STAR_TRANSFORMATION */ 
makes the optimizer use the best plan in which the transformation 
has been used. 
최적자가 그 변형이 사용된 가장 좋은 계획을 사용하는 제작

Posted by hengki

댓글을 달아 주세요