- 힌트란? 옵티마이저가 성능에 최적화된 실행계획을 선택할 수 있도록 직접 방향을 제시하는 것을 의미한다.
- 힌트 문법
- 한줄 사용 시에 "--+ 힌트"
- 여러줄 사용 시에 "/*+ 힌트*/"
- 힌트 사용
- 힌트는 대표적으로 옵티마이저, 조인에서 주로 사용된다.
- 옵티마이저에서 힌트 사용
- ALL_ROWS : 설정된 인덱스를 사용하지 않고 전체 데이터를 확인한다.
- 사용 방법ALL_ROWS 사용 방법
SELECT /*+ ALL_ROWS */
empno, ename
FROM emp
WHERE
; - FIRST_ROWS : 인수로 사용할 숫자만큼의 행이 빠르게 반환되는 실행 계획을 옵티마이저가 선택하게 한다.
- 사용 방법FIRST_ROWS 사용 방법
SELECT /*+ FIRST_ROWS(10) */
empno, ename
FROM emp
WHERE
; - 조인에서 힌트 사용
- ORDERED : FROM 절에 기술된 테이블 순으로 조인을 처리한다.
- 사용 방법ORDERED 사용법
SELECT /*+ ORDERED */
E.NAME, D.DEPT_NAME, D.ADDRESS
FROM EMP E, DEP D
WHERE E.DEPTNO = D.DEPTNO
;
-- 조인을 EMP가 Driving 테이블이 되어 조인 실행 - LEADING : FROM 절에 기술된 테이블의 조인 순서를 바꾸어서 조인을 처리한다.
- 사용 방법LEADING 사용법
SELECT /*+ LEADING(D) */
E.NAME, D.DEPT_NAME, D.ADDRESS
FROM EMP E, DEP D
WHERE E.DEPTNO = D.DEPTNO
;
SELECT /*+ LEADING(D E) */
E.NAME, D.DEPT_NAME, D.ADDRESS
FROM EMP E, DEP D
WHERE E.DEPTNO = D.DEPTNO
;
-- 조인을 DEP가 Driving 테이블이 되어 조인 실행 - USE_NL : 조인 방식 중 NESTED LOOP JOIN을 사용하게 지정한다.
- 사용 방법USE_NL 사용법
SELECT /*+ USE_NL(E D) */
E.NAME, D.DEPT_NAME, D.ADDRESS
FROM EMP E, DEP D
WHERE E.DEPTNO = D.DEPTNO
;
-- 조인 수행 시에 NESTED LOOP JOIN으로 조인 - NESTED LOOP JOIN을 사용하지 않고 싶다면 NO_USE_NL을 사용한다.
- USE_HASH : 조인 방식 중 HASH JOIN을 사용하게 지정한다.
- 사용 방법USE_HASH 사용법
SELECT /*+ USE_HASH(E D) */
E.NAME, D.DEPT_NAME, D.ADDRESS
FROM EMP E, DEP D
WHERE E.DEPTNO = D.DEPTNO
;
-- 조인 수행 시에 HASH JOIN으로 조인 - HASH JOIN을 사용하지 않고 싶다면 NO_USE_HASH를 사용한다.
참고도서 : 실전사례로 살펴보는 SQL 튜닝비법