본문 바로가기
Database

[Oracle] SQL 쿼리에 대한 옵티마이저 힌트를 제공하는 문법

by 떡쇠 2024. 5. 4.
반응형

Oracle에서 힌트를 사용하는 것은 쿼리 옵티마이저에게 특정한 방식으로 쿼리를 실행하도록 제안하는 방법이다.

힌트는 SQL 쿼리의 실행 계획을 세밀하게 조정할 수 있게 해주며, 쿼리의 성능을 향상시킬 수 있다. 하지만 힌트를 올바르게 사용하지 않으면 오히려 성능을 저하 시킬 수  있으므로 이 글에서는 힌트의 종류와 사용법에 대해 알아보자.

 


사용 방법

아래 예제처럼 SELECT 키워드 뒤에 /*+ INDEX (TABLE_A IDX_NAME) */ 처럼 주석 형식으로 사용한다. 힌트는 여러가지 지시사항을 공백으로 구분하여 나열할 수 있다.

SELECT /*+ INDEX (TABLE_A IDX_NAME) */
  FROM TABLE_A
;

 

주로 사용되는 Oracle 힌트

조인 힌트

  • 'USE_NL (A B)': A와 B 테이블 사이에 네스티드 루프 조인을 사용하라는 지시이다.
  • 'USE_HASH (A B)': A와 B 테이블 사이에 해시 조인을 사용하라는 지시이다.
  • 'USE_MERGE (A B)': A와 B 테이블 사이에 소트 머지 조인을 사용하라는 지시이다.

액세스 경로 힌트

  • 'INDEX (A idx_name)': A 테이블에 대해 idx_name 인덱스를 사용하라는 지시이다.
  • 'FULL (A)': A 테이블에 대해 전체 테이블 스캔을 사용하라는 지시이다.

병렬 처리 힌트(병렬로 작업을 수행할 유닛의 수)

  • 'PARALLEL (A, 4)': A 테이블의 쿼리를 병렬로 처리하되, 병렬도는 4로 하라는 지시이다.
  • 'NOPARALLEL (A)': A 테이블의 쿼리를 병렬로 처리하지 말라는 지시이다.

기타 유용한 힌트

  • LEADING (A B): 조인 순서에서 A 테이블을 먼저 처리하라는 지시이다.
  • PUSH_PRED (A): 뷰 또는 서브쿼리에서 조인 조건을 가능한 한 바깥쪽으로 밀어내라는 지시이다.
  • NO_MERGE(A): 서브쿼리나 뷰에 대한 병합 최적화를 수행하지 말라는 지시이다.
  • DRIVING_SITE(A): 분산 조인에서 A 테이블이 위치한 사이트에서 쿼리를 수행하라는 지시이다.

 

 

반응형