Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

DBDBDEEP

[친절한 SQL] 1.1.5 옵티마이저 힌트 본문

친절한 SQL 튜닝

[친절한 SQL] 1.1.5 옵티마이저 힌트

Kihwane 2026. 5. 11. 10:05

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 서브쿼리를 가급적 늦게 필터링하도록 유도