DB/Oracle

[ORACLE] Query Hint(쿼리 힌트)

Plone 2021. 1. 17. 15:42

#Query Hint(쿼리 힌트)

SQL을 튜닝할때 쓰이는 지시구문
SQL이 실행될때 Optimizer가 분석하고 최적으로 선택(인덱스 등)을 하여 실행되는데
이때 사용자 임의대로 설정하여 Optimizer의 실행계획을 원하는대로 바꿀 수 있다

 

#작성법

1.오라클의 경우 /*+ */ or --+ 안에 작성 한다

 

2.오라클의 쿼리힌트는 SELECT, UPDATE, DELETE, INSERT 다음 구문에 작성한다

EX) SELECT /*+ INDEX(테이블명 인덱스명)*/

EX) SELECT --+ INDEX(테이블명 인덱스명)

 

3.힌트가 여러개일 경우 공백으로 구분 한다

EX) SELECT /*+ INDEX(테이블명 인덱스명) INDEX(테이블명 인덱스명)*/

 

4.힌트내 인자구분은 공백 or ,로 구분한다

EX) SELECT /*+ INDEX(테이블명 인덱스명)*/

EX) SELECT --+ INDEX(테이블명, 인덱스명)

 

#인덱스 힌트

테이블에 사용할 인덱스를 사용자가 수동으로 정의하는 것

사용하려는 테이블과 인덱스가 존재해야한다

SELECT /*+ INDEX(MST_GOODS MST_GOODS_PK)*/ --MST_GOODS테이블에 MST_GOODS_PK인덱스를 사용함
* 
FROM MST_Goods;

 

또한 인덱스에 설정되어 있는 오름차순/내림차순을 강제로 바꾸어 검색할 수도 있다

(실행시에만 적용되고 인덱스의 오름차순/내림차순 설정이 바뀌지는 않는다)

INDEX다음에 _ASC or _DESC을 붙이면 된다

SELECT /*+ INDEX_ASC(MST_GOODS MST_GOODS_PK)*/ --인덱스 기준키를 오름차순으로 검색
* 
FROM MST_Goods;

SELECT /*+ INDEX_DESC(MST_GOODS MST_GOODS_PK)*/ --인덱스 기준키를 내림차순으로 검색
* 
FROM MST_Goods;

 

#그 외 종류

/*+ ALL_ROWS */

전체 데이터를 가져올 때 가장 비용이 적은 방법의 실행계획을 만들어 실행

/*+ FIRST_ROWS(n개) */

첫번째 행을 가져올 때 가장 비용이 적은 방법의 실행계획을 만들어 실행

 

/*+ FULL (table) */

파라미터에 명시된 테이블을 FULL TABLE SCAN 방식을 사용하여 접근한다.

/*+ INDEX (table index) */

파라미터에 명시된 테이블의 인덱스를 사용해서 INDEX SCAN 방식을 사용한다.

/*+ NO_INDEX (table index) */

파라미터에 명시된 테이블의 인덱스를 사용하지 않는다.