본문 바로가기
카테고리 없음

SQL 힌트(Hint) 완벽 사용법

by 유형제맘 2025. 8. 14.

1. SQL 힌트란?

SQL 힌트(Hint)는 데이터베이스 옵티마이저(Optimizer)가 실행 계획을 세울 때 개발자가 의도하는 방식으로
쿼리를 유도하기 위해 작성하는 지시문입니다.
힌트를 사용하면 쿼리 실행 순서, 조인 방식, 병렬 처리 여부 등을 직접 제어할 수 있습니다.

주의

  • 힌트는 반드시 필요한 경우에만 사용해야 합니다.
  • 잘못 사용하면 성능이 오히려 저하될 수 있습니다.

2. 힌트의 기본 문법

SELECT /*+ HINT_NAME */ 컬럼명
FROM 테이블명
WHERE 조건;
  • /*+ ... */ 형태의 주석 안에 힌트를 작성
  • 힌트와 다른 주석 구문이 혼동되지 않도록 주의

3. 자주 쓰는 SQL 힌트 종류

(1) 실행 계획 관련 힌트

힌트 설명 예시
FULL 테이블 전체 스캔 /*+ FULL(EMP) */
INDEX 특정 인덱스를 사용 /*+ INDEX(EMP EMP_IDX) */
INDEX_DESC 인덱스를 내림차순으로 사용 /*+ INDEX_DESC(EMP EMP_IDX) */
NO_INDEX 특정 인덱스 사용 방지 /*+ NO_INDEX(EMP EMP_IDX) */

(2) 조인 방식 관련 힌트

힌트 설명 예시
USE_NL Nested Loop Join 강제 /*+ USE_NL(E D) */
USE_HASH Hash Join 강제 /*+ USE_HASH(E D) */
USE_MERGE Sort Merge Join 강제 /*+ USE_MERGE(E D) */
ORDERED FROM 절 테이블 순서대로 조인 수행 /*+ ORDERED */

(3) 병렬 처리 관련 힌트

힌트 설명 예시
PARALLEL 병렬 처리 강제 /*+ PARALLEL(SALES, 4) */
NOPARALLEL 병렬 처리 비활성화 /*+ NOPARALLEL(SALES) */

4. 힌트 사용 예시

(1) 인덱스 강제 사용

SELECT /*+ INDEX(EMP EMP_IDX) */
       EMPNO, ENAME
FROM EMP
WHERE EMPNO = 7788;
  • EMP 테이블에서 EMP_IDX 인덱스를 강제로 사용

(2) 조인 방식 변경

SELECT /*+ USE_HASH(E D) */
       E.ENAME, D.DNAME
FROM EMP E
JOIN DEPT D ON E.DEPTNO = D.DEPTNO;
  • EMPDEPTHash Join으로 수행

(3) 병렬 처리 적용

SELECT /*+ PARALLEL(SALES, 4) */
       SALE_DATE, SUM(AMOUNT)
FROM SALES
GROUP BY SALE_DATE;
  • SALES 테이블을 4개의 병렬 프로세스로 처리

5. 힌트 사용 시 주의사항

  • 힌트는 옵티마이저의 기본 판단을 무시하므로, 성능 분석 후 사용
  • 데이터 통계 정보가 최신이어야 힌트 효과가 정확함
  • 동일한 쿼리라도 DBMS 버전, 실행 환경에 따라 힌트 효과가 달라질 수 있음

6. 정리

  • 힌트(Hint)는 SQL 실행 계획을 직접 제어하는 도구
  • FULL, INDEX, USE_HASH, PARALLEL 등 다양한 힌트를 조합 가능
  • 무분별한 힌트 사용은 성능 저하를 유발할 수 있으므로
    분석 → 테스트 → 적용 절차를 거쳐야 함