카테고리 없음
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;
EMP
와 DEPT
를 Hash 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 등 다양한 힌트를 조합 가능
- 무분별한 힌트 사용은 성능 저하를 유발할 수 있으므로
분석 → 테스트 → 적용 절차를 거쳐야 함