오라클 HINT
1.최적화 목표
1)ALL_ROWS : 전체 처리속도 최적화
2)FIRST_ROWS(N) : 최초 N건 응답속도 최적화
2.액세스 방식
1)FULL : Table Full Scan으로 유도
2)INDEX : Index Scan으로 유도
3)INDEX_DESC : Index를 역순으로 스캔하도록 유도
4)INDEX_FFS : Index Fast Full Scan으로 유도
5)INDEX_SS : Index Skip Scan으로 유도
3.조인순서
1)ORDERED : FROM 절에 나열된 순서대로 조인
2)LEADING : LEADING 힌트 괄호에 기술한 순서대로 조인
예)LEADING(T1 T2)
3)SWAP_JOIN_INPUTS : 해시 조인 시, BUILD INPUT을 명시적으로 선택
예)SWAP_JOIN_INPUTS(T1)
4.조인방식
1)USE_NL : NL 조인으로 유도
2)USE_MERGE : 소트 머지 조인으로 유도
3)USE_HASH : 해시 조인으로 유도
4)NL_SJ : NL 세미조인으로 유도
5)MERGE_SJ : 소트 머지 세미조인으로 유도
6)HASH_SJ : 해시 세미조인으로 유도
5.서브쿼리 팩토링
1)MATERIALIZE : WITH 문으로 정의한 집함을 물리적으로 생성하도록 유도
예)WITH /*+ MATERIALIZE */ T AS
2)INLINE : WITH 문으로 정의한 집합을 물리적으로 생성하지 않고 INLINE 처리하도록 유도
예)WITH /*+ INLINE */
6.쿼리 변환
1)MERGE : 뷰 머징 유도, 두 개의 뷰를 하나로 머지해서 조인
2)NO_MERGE : 뷰 머징 방지
3)UNNEST : 서브쿼리 Unnesting 유도, MAIN 쿼리와 서브 쿼리를 조인으로 유도
4)NO_UNNEST : 서브쿼리 Unnesting 방지
5)PUSH_PRED : 조인조건 Pushdown 유도, 인라인뷰에 조건절 삽입 유도
6)NO_PUSH_PRED : 조인조건 Pushdown 방지
7)USE_CONCAT : OR 또는 IN-List 조건을 OR-Expansion으로 유도
8)NO_EXPAND : OR 또는 IN-List 조건에 대한 OR-Expansion 방지
7.병렬 처리
1)PARALLEL : 테이블 스캔 또는 DML을 병렬방식으로 처리하도록 유도
예)PARALLEL(T1 2) PARRALLEL(T2 2)
2)PARALLEL_INDEX : 인덱스 스캔을 병렬방식으로 처리하도록 유도
3)PQ_DISRIBUTE : 병렬 수행 시 데이터 분배 방식 결정
예)PQ_DISRIBUTE(T1 HASH HASH)
8.기타
1)APPEND : Direct-Path Insert로 유도
2)DRIVING_SITE : DB Link Remote 쿼리에 대한 최적화 및 실행 주체 지정(Local 또는 Remote)
3)PUSH_SUBQ : 서브쿼리를 가급적 빨리 필터링하도록 유도
4)NO_PUSH_SUBQ : 서브쿼리를 가급적 늦게 필터링하도록 유도
1. INLIST ITERATOR
1)INLIST ITERATOR 아래에 있는 처리를 IN조건에 나열된 값만큼 반복수행한다.
2)'BETWEEN'은 선분을 의미하나, 'IN'은 여러개의 점을 의미한다.
3)선분의 개념은 Range Scan을 하게 되지만, 점의 개념은 '='을 사용할 수 있다.
4)옵티마이저는 IN연산을 OR형태로 변경한 후 실행계획을 수립하므로,
IN대신 OR을 사용해도 실행계획은 동일하다.
#'IN'을 사용했는데도 INLIST ITERATOR가 나타나지 않는 경우
- IN 절의 값이 하나만 있는 경우
- 처리주관 인덱스에 적용된 경우가 아니어서 단지 체크기능만 담당하는 경우
- 인덱스 구성에서 IN을 사용한 컬럼앞에 위치한 컬럼이 모두 '='로 사용되지 않았을 때는
경우에 따라 다름
- IN 조건이 연속으로 나타났을때 는 경우에 따라 다름
- 결합된 컬럼의 개수에도 영향을 받음
- IN조건에 사용된 값이 상수, 변수, 서브쿼리일 때도 달라짐
- INDEX(table_alias index_name)힌트를 적용하여 IN조건을 사용한 컬럼이 속한 인덱스를
사용하도록 할수 있으나, 적용여부는 옵티마이저가 결정한다.
2.CONCATENATION
1)'OR'로 연결된 서로 다른 컬럼을 사용한 조건을 별도의 실행단위로 분리하여
각각의 최적의 액세스 경로를 수립하여 이를 연결하는 실행계획
2)'OR'조건이 처리주관 조건의 역할을 하는 경우에만 그렇게 실행되며,
아닌 경우 단순히 체크조건으로만 사용된다.
3)USE_CONCAT힌트로 유도가능, NO_EXPAND힌트로 적용 불가능하게 할 수 있음.
4)'OR'조건은 상황에 따라사 CONCATENATION이 유리할 수도 있고 불리할 수도 있으므로
실행계획을 확인해보고, 함부로 힌트를 적용하지 않는것이 바람직 하다.
#적용하지 않는 것이 바람직한 경우
- 조인의 연결고리가 'OR"조건을 가질 때 조인의 상대방이 넓은 처리범위를 가질 때
- 동일 컬럼의 'OR'조건 : INLIST ITERATOR가 유리
- 보다 효율적으로 처리범위를 줄일 수 있는 다른 액세스 경로가 있을때
- 'OR'조건들 중에서 너무 넓은 처리범위를 가진 것들이 존재할 때
'오라클 > 오라클 튜닝' 카테고리의 다른 글
NL조인 (0) | 2021.12.11 |
---|---|
인덱스 튜닝 (0) | 2021.12.05 |
인덱스 개요 (0) | 2021.12.04 |
실행계획 용어 정리 (0) | 2021.12.03 |
실행계획 읽는 순서 (0) | 2021.12.03 |