느린 것을 걱정하지 말고, 멈춰서는 것을 걱정하라
Published 2023. 9. 24. 10:51
자주 사용되는 오라클 힌트 IT/ORACLE

 

현재, 친절한 SQL튜닝이라는 책을 보고 있는데, 아래의 쿼리 힌트가 자주 사용된다고 하여 메모해둔 다음 틈틈이 보기 위해 남겨둔다.

 

분류 힌크 설명
최적화 목표
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 힌트 괄호에 기술한 순서대로 조인(T1 T2)
SWAP_JOIN_INPUTS 해시 조인 시, Build Input을 명시적으로 선택(SWAP_JOIN_INPUTS(T1)
조인 방식
USE_NL NL 조인으로 유도
USE_MERGE 소트 머지조인으로 유도
USE_HASH 해시 조인으로 유도
NL_SJ NL 세미조인으로 유도
MERGE_SJ 소트 머지 세미조인으로 유도
HASH_SJ 해시 세미조인으로 유도
서브쿼리 팩토링
MATERIALIZE WITH 문으로 정의한 집합을 물리적으로 생성하도록 유도
예) WITH /*+ MATERIALIZE */ T AS (SELECT ...)
INLINE
WITH 문으로 정의한 집합을 물리적으로 생성하지 않고 INLINE 처리하도록 유도
예) WITH /*+ INLINE */ T AS (SELECT ...)
쿼리 변환
MERGE 뷰 머징 유도
NO_MERGE 뷰 머징 방지
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) PARALLEL(T1 2)
PARALLEL_INDEX 인덱스 스캔을 병렬 방식으로 처리하도록 유도
PQ_DISTRIBUTE 병렬 수행 시 데이터 분배 방식 결정
예) PQ_DISTRIBUTE(T1 HASH HASH)
기타
APPEND Direct-Path Insert 유도
DRIVING_SITE
DB Link Remote 쿼리에 대한 최적화 및 실행 주체 지정(Local 또는 Remote)
PUSH_SUBQ 서브쿼리를 가급적 빨리 필터링하도록 유도
NO_PUSH_SUBQ 서브쿼리를 가급적 늦게 필터링하도록 유도
profile

느린 것을 걱정하지 말고, 멈춰서는 것을 걱정하라

@주현태

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!