Skip to content

SELECT hint

SELECT 힌트는 /*+ ... */ 형식의 주석 블록으로 옵티마이저 동작을 제어하거나 샘플링 등의 데이터 처리 기능을 지정합니다.

힌트 문법

SELECT /*+ hint_clause */ ...
SELECT /*+ hint1 hint2 */ ...

힌트는 SELECT 키워드 바로 뒤의 /*+ ... */ 블록에 작성합니다.

주요 힌트 목록

실행 계획 제어 힌트

힌트문법설명
PARALLEL/*+ PARALLEL(table, n) */병렬 처리 계수 지정
NOPARALLEL/*+ NOPARALLEL(table) */병렬 처리 비활성화
FULL/*+ FULL(table) */인덱스 스캔 대신 풀 스캔 강제
NO_INDEX/*+ NO_INDEX(table, index) */특정 인덱스 사용 안 함
ROLLUP_TABLE/*+ ROLLUP_TABLE(rollup_table) */특정 ROLLUP 테이블 강제 선택
RID_RANGE/*+ RID_RANGE(table, start, end) */RID 범위 지정
SCAN_FORWARD/*+ SCAN_FORWARD(table) */오래된 레코드부터 스캔 (LOG 테이블)
SCAN_BACKWARD/*+ SCAN_BACKWARD(table) */최신 레코드부터 스캔 (LOG 테이블)

데이터 처리 힌트

힌트문법설명
SAMPLING/*+ SAMPLING(SamplingRate) */실수 값으로 지정한 비율에 따라 데이터 추출

예시

-- 병렬 처리 8개 스레드
SELECT /*+ PARALLEL(sensor_log, 8) */ sensor, AVG(value)
  FROM sensor_log
 WHERE ts BETWEEN TO_DATE('2024-01-01', 'YYYY-MM-DD')
               AND TO_DATE('2024-01-31', 'YYYY-MM-DD')
 GROUP BY sensor;

-- 특정 인덱스 미사용
SELECT /*+ NO_INDEX(sensor_log, idx_ts) */ *
  FROM sensor_log
 WHERE ts > TO_DATE('2024-01-01', 'YYYY-MM-DD');

-- ROLLUP 테이블 강제 선택
SELECT /*+ ROLLUP_TABLE(_rollup_tag_value_min) */
       name, rollup('min', 5, time) AS t, AVG(value)
  FROM tag
 WHERE name = 'TEMP-01'
 GROUP BY name, t;

-- 조건에 맞는 행을 최대 100,000행으로 제한한 범위에서 1% 비율로 추출
SELECT /*+ SAMPLING(0.01) */ t_name, time, value
  FROM tag
 WHERE t_name = 'TAG_99'
 LIMIT 100000;

하위 항목

관련 문서

최근 업데이트