|
힌트 사용 권고 : 힌트는 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월 6일 월요일
[oracle] hints #1
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기