[Oracle] 오라클 HINT에는 무엇이 있는지 알아볼까요
오라클 HINT에 대해서 알아보도록 하겠습니다.
오라클 힌트는 SQL 쿼리 실행 계획을 제어하기 위한 지시사항으로 사용됩니다.
힌트는 쿼리 옵티마이저에게 특정 방법으로 쿼리를 실행하도록 알려주는 주석 형태의 명령어입니다.
예를 들어, /*+ INDEX(table_name index_name) */ 와 같은 형식으로 사용될 수 있습니다.
이 힌트를 사용하면 옵티마이저가 테이블을 스캔하는 대신 인덱스를 사용하도록 유도할 수 있습니다.
또한, 힌트를 사용하여 조인 순서를 강제로 지정하거나 다른 실행 계획에 영향을 미칠 수 있습니다.
그러나 힌트를 남용하면 안 되며, 데이터베이스의 통계와 구조의 변경에 민감하게 반응할 수 있습니다.
힌트를 사용하기 전에 옵티마이저가 최적의 실행 계획을 찾을 수 있도록 노력하는 것이 좋습니다.
<힌트 종류>
*INDEX Access Operation
-INDEX: INDEX를 순차적 스캔
[사용방법: INDEX(TABLE_name, INDEX_name)]
-INDEX_ASC: INDEX를 내림차순 스캔.
[사용방법: INDEX_ASC(TABLE_name, INDEX_name)]
-INDEX_DESC: INDEX를 오름차순 스캔
[사용방법: INDEX_DESC(TABLE_name, INDEX_name)]
-INDEX_FFS: INDEX FAST FULL SCAN
[사용방법: INDEX_FFS(TABLE_name, INDEX_name)]
-PARALLEL_INDEX: INDEX PARALLEL SCAN
[사용방법: PARALLEL_INDEX(TABLE_name, INDEX_name)]
-NOPARALLEL_INDEX: INDEX PARALLEL SCAN 제한.
[사용방법: NOPARALLEL_INDEX(TABLE_name, INDEX_name)]
-AND_EQUALS: 여러 개의 INDEX MARGE 수행.
[사용방법: AND_EQUALS(INDEX_name, INDEX_name)]
-FULL: FULL SCAN 지정된 테이블에 대한 전체 스캔.
[사용방법: FULL(TABLE_name)]
*Join Hint
-USE_NL: NESTED LOOP JOIN 옵티마이저가 NESTED LOOP JOIN을 사용하도록 한다.
[사용방법: USE_NL(TABLE1, TABLE2)]
-USE_NL_WITH_INDEX: INDEX를 사용해서 NESTED LOOP JOIN을 사용하도록 한다.
[사용방법: USE_NL_WITH_INDEX(TABLE INDEX)]
-USE_MERGE: SORT MERGE JOIN 옵티마이저가 SORT MERGE JOIN을 사용하도록 한다.
먼저 각각의 TABLE의 처리 범위를 스캔하여 SORT 한 후, 서로 MERGE 하면서 JOIN 하는 방식.
[사용방법: USE_MERGE(TABLE1, TABLE2)]
-USE_HASH: HASH JOIN 옵티마이저가 HASH JOIN을 사용하도록 한다.
[사용방법: USE_HASH(TABLE1, TABLE2)]
-HASH_AJ: HASH ANTIJOIN.
[사용방법: HASH_AJ(TABLE1, TABLE2)]
-HASH_SJ: HASH SEMIJOIN.
[사용방법: HASH_SJ(TABLE1, TABLE2)]
-NL_AJ: NESTED LOOP ANTIJOIN.
[사용방법: NL_AJ(TABLE1, TABLE2)]
-NL_SJ: NESTED LOOP SEMIJOIN.
[사용방법: NL_SJ(TABLE1, TABLE2)]
-MERGE_AJ: SORT MERGE ANTIJOIN.
[사용방법: MERGE_AJ(TABLE1, TABLE2)]
-MERGE_SJ: SORT MERGE SEMIJOIN.
[사용방법: MERGE_SJ(TABLE1, TABLE2)]
*JOIN시 DRIVING 순서 결정 HINT
-ORDERED: FROM절에 명시된 테이블의 순서대로 DRIVING.
-LEADING: 파라미터에 명시된 테이블의 순서대로 JOIN.
[사용방법: LEAING(TABLE_name1, TABLE_name2...)]
-DRIVING: 해당 테이블을 먼저 DRIVING.
[사용방법: DRIVING(TABLE)]
*Optimization Goal Hint (최적화 목표 힌트)
-ALL_ROWS: [사용방법: /*+ ALL_ROWS */]
-FIRST_ROWS: [사용방법: /*+ FIRST_ROWS(n)] 옵티마이저에게 어떤 실행 계획을 사용해야 하는지 알려줍니다.
*Result Cache Hint (결과 캐시 힌트)
-RESULT_CACHE: 결과 캐시 사용 여부를 지정합니다.
[사용방법:/*+ RESULT_CACHE */]
*Materialize Hint (매터리얼라이즈 힌트)
-MATERIALIZED: 중간 결과 집합을 디스크에 저장하는 데 사용됩니다.
[사용방법: /*+ MATERIALIZED */]
*Inline View Hint (인라인 뷰 힌트)
-INLINE: 인라인 뷰를 메인 쿼리에 펼치는 데 사용됩니다.
[사용방법: /*+ INLINE */]
*기타 HINT
-opt_param: OPT_PARAM 힌트를 사용하면 현재 쿼리 기간 동안만 초기화 매개 변수를 설정할 수 있습니다
[사용방법: /*+ opt_param('_optimizer_cost_based_transformation', 'off') bypass_ujvc */]
-NO_QUERY_TRANSFORMATION: Query Transformation을 수행하지 않도록 지정합니다. 즉 쿼리를 변환하지 않음
[사용방법: /*+ NO_QUERY_TRANSFORMATION */]
-PUSH_PRED: 조인 조건 컬럼을 뷰안으로 병합하라고 조언해 주는 힌트입니다.
[사용방법: /*+ PUSH_PRED(V1) */ /*+ NO_PUSH_PRED(V1) */]
-UNNEST: FILTER 동작방식을 선택하지 않고 조인 동작방식으로 처리할 때 서브쿼리에서 힌트 사용합니다.
[사용방법: /*+ UNNEST */]
-NO_UNNEST: 서브쿼리를 FILTER동작방식으로 처리할때 서브쿼리에서 힌트를 사용합니다.
[사용방법: /*+ NO_UNNEST */]
-SWAP_JOIN_INPUTS:후행테이블집합을 선행테이블집합으로 강제로 바꿉니다.
[사용방법: /*+ SWAP_JOIN_INPUTS(후행테이블) */] Hash join Right Semi/Anti/Outer 에 사용됩니다.
오라클에 HINT에 대해서 어떤것들이 있는지 알아보았습니다.
'오라클' 카테고리의 다른 글
오라클 정규식 REGEXP_SUBSTR 함수 사용법 (0) | 2024.02.28 |
---|---|
[Oracle] 오라클 UNPIVOT()에 대해서 (0) | 2023.12.21 |
[Oracle] 오라클 성능 모니터링 활용 도구 (0) | 2023.12.01 |
[Oracle] 오라클 select 튜닝 기본 과정 (0) | 2023.11.29 |