728x90
728x90
오라클 데이터베이스에서 **힌트(Hint)**는 SQL 문에 대한 실행 계획을 제어하거나 최적화하는 데 사용되는 명령어입니다. 힌트는 주로 쿼리의 성능을 개선하거나 옵티마이저가 선택하는 실행 계획을 변경하고자 할 때 사용됩니다.
1. 힌트의 기본 사용법
- 힌트는 SQL 문 내부의 /*+ ... */ 형태로 작성됩니다.
- SELECT, INSERT, UPDATE, DELETE 문 바로 뒤에 위치해야 합니다.
문법:
SELECT /*+ HINT_NAME */ 컬럼명
FROM 테이블명;
2. 주요 힌트 종류 및 사용법
1) 옵티마이저 관련 힌트
- 옵티마이저가 쿼리를 최적화하는 방식을 제어합니다.
힌트 설명 예시
ALL_ROWS | 최소 리소스로 전체 결과를 빠르게 반환 | SELECT /*+ ALL_ROWS */ * FROM EMP; |
FIRST_ROWS(n) | 처음 n개의 행을 빠르게 반환 | SELECT /*+ FIRST_ROWS(10) */ * FROM EMP; |
RULE | 규칙 기반 옵티마이저(RBO) 사용 (구버전) | SELECT /*+ RULE */ * FROM EMP; |
2) 테이블 액세스 관련 힌트
- 옵티마이저가 테이블에 접근하는 방식을 제어합니다.
힌트 설명 예시
FULL | 테이블 풀 스캔 사용 | SELECT /*+ FULL(EMP) */ * FROM EMP; |
INDEX | 특정 인덱스를 강제로 사용 | SELECT /*+ INDEX(EMP IDX_EMP_SAL) */ * FROM EMP; |
INDEX_FFS | 인덱스 Fast Full Scan 사용 | SELECT /*+ INDEX_FFS(EMP IDX_EMP_SAL) */ * FROM EMP; |
ROWID | ROWID를 사용해 테이블에 접근 | SELECT /*+ ROWID(EMP) */ * FROM EMP; |
3) 조인 관련 힌트
- 여러 테이블 간 조인 방식을 제어합니다.
힌트 설명 예시
USE_NL | Nested Loop 조인 사용 | SELECT /*+ USE_NL(E1 E2) */ * FROM EMP E1, DEPT E2 WHERE E1.DEPT_ID = E2.DEPT_ID; |
USE_HASH | 해시 조인 사용 | SELECT /*+ USE_HASH(E1 E2) */ * FROM EMP E1, DEPT E2 WHERE E1.DEPT_ID = E2.DEPT_ID; |
MERGE | Sort Merge 조인 사용 | SELECT /*+ MERGE(E1 E2) */ * FROM EMP E1, DEPT E2 WHERE E1.DEPT_ID = E2.DEPT_ID; |
DRIVING_SITE | 조인 결과를 특정 테이블로 전달 | SELECT /*+ DRIVING_SITE(DEPT) */ * FROM EMP E1, DEPT E2; |
4) 병렬 처리 관련 힌트
- 쿼리의 병렬 실행을 제어합니다.
힌트 설명 예시
PARALLEL | 테이블에 대해 병렬 처리 사용 | SELECT /*+ PARALLEL(EMP 4) */ * FROM EMP; |
NO_PARALLEL | 병렬 처리를 사용하지 않음 | SELECT /*+ NO_PARALLEL(EMP) */ * FROM EMP; |
PQ_DISTRIBUTE | 병렬 쿼리 결과 분산 방식을 제어 | SELECT /*+ PQ_DISTRIBUTE(EMP NONE HASH) */ * FROM EMP; |
5) 쿼리 블록 힌트
- 여러 서브쿼리나 인라인 뷰가 포함된 쿼리에서 특정 쿼리 블록에 힌트를 적용합니다.
힌트 설명 예시
QB_NAME | 쿼리 블록에 이름 지정 | SELECT /*+ QB_NAME(main_query) */ * FROM EMP; |
NO_UNNEST | 서브쿼리의 UNNEST 최적화 방지 | SELECT /*+ NO_UNNEST */ * FROM ...; |
PUSH_PREDICATE | 조건절을 뷰 내부로 푸시 | SELECT /*+ PUSH_PREDICATE */ * FROM VIEW1; |
3. 실행 계획 확인
힌트를 적용했을 때 SQL 문이 의도한 대로 실행되었는지 실행 계획을 통해 확인할 수 있습니다.
EXPLAIN PLAN FOR
SELECT /*+ FULL(EMP) */ *
FROM EMP;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
4. 주의사항
- 힌트는 옵티마이저의 권장사항일 뿐, 반드시 적용되는 것은 아닙니다.
- 잘못된 힌트를 사용하면 성능이 오히려 저하될 수 있습니다.
- 힌트를 남용하지 말고, 실행 계획을 분석한 후 필요한 경우에만 사용하세요.
요약
오라클 힌트는 SQL 실행 계획을 제어하기 위한 도구입니다.
주요 힌트:
- 옵티마이저: ALL_ROWS, FIRST_ROWS
- 테이블 액세스: FULL, INDEX
- 조인: USE_NL, USE_HASH
- 병렬 처리: PARALLEL, NO_PARALLEL
- 쿼리 블록: QB_NAME, PUSH_PREDICATE
실행 계획을 확인하여 힌트 적용 여부와 성능 개선 효과를 검증하는 것이 중요합니다.
728x90
728x90
'데이터베이스 DB' 카테고리의 다른 글
SQL 윈도우 함수 정리: 개념과 예제 (0) | 2024.12.17 |
---|---|
서브쿼리 종류 (0) | 2024.12.17 |
VIEW PUSHED PREDICATE (0) | 2024.12.17 |
오라클 환경셋팅, 오라클 다운로드 방법 (0) | 2024.12.17 |
SQL 실행 계획 분석 실전 (0) | 2024.12.17 |
댓글