DBDBDEEP
[친절한 SQL] 1.1.5 옵티마이저 힌트 본문
HINT(힌트)
옵티마이저 힌트를 이용해 데이터 액세스 경로를 바꿀 수 있다.
힌트사용법은 아래와 같이 주석 기호에 '+'를 붙이면 된다.
SELECT /*+ INDEX(A 고객_PK) */
고객명, 연락처,주소, 가입일시
FROM 고객 A
WHERE 고객 ID == '000000008'
주의사항
1. 힌트 안에 인자를 나열할 땐 ','(콤마)를 사용할 수 있지만, 힌트와 힌트 사이에 사용해서는 안된다.
/*+ INDEX(A A_X01 ) INDEX(B, B_X03) */ 모두 유효
/*+ INDEX©, FULL(D) */ 첫 번쨰 힌트만 유효
2. 테이블을 지정할 때 스키마명까지 명시하면 안된다.
3. FROM절에 ALIAS를 지정했다면 힌트에도 반드시 ALIAS를 사용해야 한다.
SELECT /* + FULL(E) */ FROM EMP E
| 분류 | 힌트 | 설명 |
| 최적화 목표 | ALL_ROWS | 전체 처리속도 최적화 |
| FIRST_ROWS(n) | 최초 n건 응답속도 최적화 | |
| 액세스 방식 | FULL | Table Full Scan 유도 |
| INDEX | Index Scan 유도 | |
| INDEX_DESC | Index 역순으로 스캔 유도 | |
| INDEX_FFS | Index Fast Full Scan 유도 | |
| INDEX_SS | Index Skip Scan 유도 | |
| 조인 순서 | ORDERED | FROM 절에 나열된 순서대로 조인 |
| LEADING | LEADING 힌트 괄호에 기술한 순서대로 조인 ex) LEADING(T1 T2) - T1, T2 순서대로 조인 |
|
| SWAP_JOIN_INPUTS | 해지 조인시, BUILD INPUT을 명시적으로 선택 ex) SWAP_JOIN_INPUTS(T1) |
|
| 조인 방식 | USE_NL | NL 조인 유도 |
| USE_MERGE | Sort Merge 조인 유도 | |
| USE_HASH | Hash 조인 유도 | |
| NL_SJ | NL 세미조인 유도 | |
| MERGE_SJ | Sort Merge 세미조인 유도 | |
| HASH_SJ | Hash 세미조인 유도 | |
| 서브쿼리 팩토링 | MATERIALIZE | WITH 문으로 정의한 집합을 물리적으로 생성하도록 유도 ex) WITH /*+ MATERIALIZE */ T AS (SELECT --- ) WITH 절 - 서브쿼리 이름을 먼저 정의 후 메인 쿼리에서 마치 임시테이블 처럼 재사용할 수 있게 하는 SQL (가독성 향상 / 재사용성 / 성능최적화 유도 / 재귀쿼리 지원) |
| INLINE | WITH 문으로 정의한 집합을 물리적으로 생성하지 않고 INLINE 처리하도록 유도 ex) WITH /*+ INLINE */ T AS (SELECT --- ) |
|
| 쿼리 변환 | MERGE | VIEW 머징 유도 |
| NO_MERGE | VIEW 머징 방지 | |
| UNNEST | 서브쿼리 Unnesting 유도 | |
| NO_UNNEST | 서브쿼리 Unnesting 방지 | |
| PUSH_PRED | 조인조건 Pushdown 유도 | |
| NO_PUSH_PRED | 조인조건 Pushdown 방지 | |
| USE_CONCAT | OR 또는 IN-List 조건을 OR-Expansion 으로 유도 | |
| NO_EXPAND | OR 또는 IN-List 조건에 대한 OR-Expansion 방지 | |
| 병렬 처리 | PARALLEL | 테이블 스캔 또는 DML 을 병렬방식으로 처리하도록 유도 ex) PARLLEL(T1 2) PARALLEL(T2 2) |
| PARALLEL_INDEX | 인덱스 스캔을 병렬방식으로 처리하도록 유도 | |
| PQ_DISTRIBUTE | 병렬 수행 시 데이터 분배 방식 경정 ex) PQ_DISTRIBUTE(T1 HASH HASH) |
|
| 기타 | APPEND | Direct-Path Insert 유도 |
| DRIVING_SITE | DB Link Remote 쿼리에 대한 최적화 및 실행 주체 지정 (Local 또는 Remote) |
|
| PUSH_SUBQ | 서브쿼리를 가급적 빨리 필터링하도록 유도 | |
| NO_PUSH_SUBQ | 서브쿼리를 가급적 늦게 필터링하도록 유도 |
'친절한 SQL 튜닝' 카테고리의 다른 글
| 2.1.5 결합 인덱스 구조와 탐색 (0) | 2026.05.16 |
|---|---|
| 2.1.3 인덱스 수직/수평적 탐색 (0) | 2026.05.16 |
| 1.3.6 Single Block,Multi Block I/O (0) | 2026.05.16 |
| [친절한 SQL] 1.3.5 논리적 I/O vs 물리적 I/O (0) | 2026.05.11 |
| [친절한 SQL] 1.3.4 시퀀셜/랜덤 액세스 (0) | 2026.05.11 |