[ORACLE] Query Hint(쿼리 힌트)
#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) */
파라미터에 명시된 테이블의 인덱스를 사용하지 않는다.