본문 바로가기
전산 관련 시험/DB(SQLP, SQLD) 문제풀이

[DB] SQL 튜닝 힌트

by 응_비 2024. 9. 10.

데이터베이스 성능 튜닝에서 자주 사용하는 튜닝 힌트(Hint)는 SQL 쿼리의 성능을 최적화하기 위해 데이터베이스 옵티마이저에게 쿼리 실행 계획을 안내하는 데 사용됩니다. 튜닝 힌트는 쿼리의 성능을 개선할 수 있지만, 데이터베이스 시스템 및 상황에 따라 적절히 사용해야 합니다. 아래는 자주 사용되는 튜닝 힌트의 주요 종류와 그 용도입니다.

1. 인덱스 관련 힌트

  • INDEX(table_name index_name):
    • 특정 인덱스를 사용하도록 지시합니다. 예를 들어, SELECT /*+ INDEX(emp idx_emp_id) */ * FROM emp WHERE emp_id = 101;
  • NO_INDEX(table_name index_name):
    • 특정 인덱스를 사용하지 않도록 지시합니다. 예를 들어, SELECT /*+ NO_INDEX(emp idx_emp_id) */ * FROM emp WHERE emp_id = 101;

2. 조인 관련 힌트

  • USE_NL(table_name):
    • Nested Loop 조인을 사용하도록 지시합니다. 예를 들어, SELECT /*+ USE_NL(emp dept) */ * FROM emp, dept WHERE emp.dept_id = dept.dept_id;
  • USE_HASH(table_name):
    • Hash Join을 사용하도록 지시합니다. 예를 들어, SELECT /*+ USE_HASH(emp dept) */ * FROM emp, dept WHERE emp.dept_id = dept.dept_id;
  • MERGE(table_name):
    • Merge Join을 사용하도록 지시합니다. 예를 들어, SELECT /*+ MERGE(emp dept) */ * FROM emp, dept WHERE emp.dept_id = dept.dept_id;

3. 쿼리 실행 계획 관련 힌트

  • FIRST_ROWS(n):
    • 처음 n개의 행을 빨리 반환하도록 지시합니다. 예를 들어, SELECT /*+ FIRST_ROWS(10) */ * FROM emp;
  • ALL_ROWS:
    • 전체 결과를 효율적으로 반환하도록 지시합니다.
  • OPTIMIZER_MODE:
    • 옵티마이저의 모드를 설정합니다. 예를 들어, SELECT /*+ OPTIMIZER_MODE(ALL_ROWS) */ * FROM emp;

4. 병렬 처리 관련 힌트

  • PARALLEL(table_name, degree):
    • 테이블의 병렬 처리 정도를 설정합니다. 예를 들어, SELECT /*+ PARALLEL(emp, 4) */ * FROM emp;

5. 쿼리 변형 힌트

  • NO_MERGE:
    • 뷰의 머지를 방지합니다. 예를 들어, SELECT /*+ NO_MERGE(view_name) */ * FROM view_name;
  • NO_EXPAND:
    • Materialized View의 확장을 방지합니다. 예를 들어, SELECT /*+ NO_EXPAND */ * FROM mat_view;

6. 행 선택 관련 힌트

  • ROWID:
    • 특정 ROWID로 직접 접근합니다. 예를 들어, SELECT /*+ ROWID(emp) */ * FROM emp WHERE ROWID = 'AAAXxxx';

7. 정렬 및 집계 관련 힌트

  • SORT_MERGE:
    • 정렬과 병합 조인을 사용하도록 지시합니다.
  • SORT_HASH:
    • 정렬 해시 조인을 사용하도록 지시합니다.

8. 기타 힌트

  • NO_CACHE:
    • 쿼리 결과를 캐시하지 않도록 지시합니다.
  • STORAGE:
    • 특정 저장 옵션을 설정합니다.

튜닝 힌트 사용 시 주의 사항

  • 과도한 힌트 사용 주의: 힌트를 과도하게 사용하면 쿼리의 최적화가 복잡해질 수 있습니다. 데이터베이스 옵티마이저의 자동 최적화 기능을 활용하는 것이 좋습니다.
  • 테스트와 모니터링: 힌트를 적용한 후 성능을 테스트하고 모니터링하여 실제 성능 개선 효과를 확인하는 것이 중요합니다.
  • 데이터베이스 시스템에 따라 다름: 각 데이터베이스 시스템(Oracle, SQL Server, MySQL 등)에서는 사용 가능한 힌트가 다를 수 있으므로, 해당 시스템의 문서를 참고하는 것이 좋습니다.

댓글