SQL 튜닝비법 - 힌트

  1. 힌트란? 옵티마이저가 성능에 최적화된 실행계획을 선택할 수 있도록 직접 방향을 제시하는 것을 의미한다.
  2. 힌트 문법
    1. 한줄 사용 시에 "--+ 힌트"
    2. 여러줄 사용 시에 "/*+ 힌트*/"
  3. 힌트 사용
    1. 힌트는 대표적으로 옵티마이저, 조인에서 주로 사용된다.
    2. 옵티마이저에서 힌트 사용
      1. ALL_ROWS : 설정된 인덱스를 사용하지 않고 전체 데이터를 확인한다.
        1. 사용 방법
          ALL_ROWS 사용 방법
          SELECT /*+ ALL_ROWS */
           empno, ename
          FROM emp
          WHERE 
          ;
      2. FIRST_ROWS : 인수로 사용할 숫자만큼의 행이 빠르게 반환되는 실행 계획을 옵티마이저가 선택하게 한다.
        1. 사용 방법
          FIRST_ROWS 사용 방법
          SELECT /*+ FIRST_ROWS(10) */
           empno, ename
          FROM emp
          WHERE 
          ;

    3. 조인에서 힌트 사용
      1. ORDERED : FROM 절에 기술된 테이블 순으로 조인을 처리한다.
        1. 사용 방법
          ORDERED 사용법
          SELECT /*+ ORDERED */
            E.NAME, D.DEPT_NAME, D.ADDRESS
          FROM EMP E, DEP D
          WHERE E.DEPTNO = D.DEPTNO
          ;
          -- 조인을 EMP가 Driving 테이블이 되어 조인 실행
      2. LEADING : FROM 절에 기술된 테이블의 조인 순서를 바꾸어서 조인을 처리한다.
        1. 사용 방법
          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 테이블이 되어 조인 실행
      3. USE_NL : 조인 방식 중 NESTED LOOP JOIN을 사용하게 지정한다.
        1. 사용 방법
          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으로 조인
        2. NESTED LOOP JOIN을 사용하지 않고 싶다면 NO_USE_NL을 사용한다.
      4. USE_HASH : 조인 방식 중  HASH JOIN을 사용하게 지정한다.
        1. 사용 방법
          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으로 조인
        2. HASH JOIN을 사용하지 않고 싶다면 NO_USE_HASH를 사용한다.
참고도서 : 실전사례로 살펴보는 SQL 튜닝비법