본문으로 건너뛰기
SQLD 준비실
이론 전체 목차 열기 27 / 32

SQL 고급활용 및 튜닝 · 통계와 힌트 27 / 32

통계 정보와 힌트 활용

옵티마이저가 의존하는 통계 정보와 실행 계획에 영향을 주는 힌트를 언제 믿고 언제 조심해야 하는지 정리합니다.

출제 빈도 ★★★☆☆ 관련 문제 3개 | 통계힌트

옵티마이저의 판단 재료

비용 기반 옵티마이저는 실제 데이터를 전부 실행해본 뒤 계획을 고르는 것이 아닙니다. 테이블과 인덱스의 통계 정보를 바탕으로 예상 비용을 계산합니다.

통계가 정확하면 좋은 계획을 고를 가능성이 높아지고, 통계가 틀리면 SQL 문장이 맞아도 실행 계획이 나빠질 수 있습니다.

주요 통계 정보

통계의미실행 계획 영향
테이블 행 수전체 데이터 규모전체 스캔 비용 추정
블록 수읽어야 할 저장 단위 규모I/O 비용 추정
컬럼 값 종류 수중복 정도선택도 계산
NULL 개수조건 제외 가능성카디널리티 추정
히스토그램값 분포의 치우침특정 조건 값의 결과 건수 추정
인덱스 높이인덱스 탐색 단계인덱스 접근 비용 추정

특히 값 분포가 치우친 컬럼은 평균만으로 판단하면 주의가 필요합니다. 예를 들어 주문 상태가 대부분 완료이고 일부만 취소라면 두 값의 선택도는 크게 다릅니다.

카디널리티 오류

카디널리티는 조건 적용 후 예상 행 수입니다. 옵티마이저가 10행으로 예상했는데 실제로 100만 행이 나오면 잘못된 조인 방식이나 인덱스 접근을 선택할 수 있습니다.

WHERE order_status = 'CANCELLED'

취소 주문이 아주 적다면 인덱스 접근이 유리할 수 있습니다. 하지만 통계가 이를 반영하지 못하면 옵티마이저가 전체 스캔이나 부적절한 조인 순서를 고를 수 있습니다.

힌트의 역할

힌트는 옵티마이저에게 특정 방향을 제안하는 방법입니다.

SELECT /*+ INDEX(o idx_orders_date) */ *
FROM orders o
WHERE o.order_date >= DATE '2026-01-01';

힌트는 실행 계획을 안정화하거나 옵티마이저가 놓친 경로를 유도할 때 도움이 됩니다. 하지만 데이터가 바뀌어도 힌트는 그대로 남기 때문에 장기적으로는 영향이 클 수 있습니다.

자주 보는 힌트 감각

힌트의도
INDEX특정 인덱스 사용 유도
FULL전체 테이블 스캔 유도
USE_NLNested Loop 조인 유도
USE_HASHHash 조인 유도
LEADING조인 시작 순서 유도

힌트는 문법이 맞아도 상황에 따라 무시되거나 기대와 다르게 작동할 수 있습니다. 객체 별칭을 정확히 맞추는 것도 중요합니다.

올바른 튜닝 순서

  1. 실제 실행 계획과 실행 통계를 확인합니다.
  2. 예상 행 수와 실제 행 수 차이를 봅니다.
  3. 통계 정보가 최신이고 분포를 반영하는지 확인합니다.
  4. SQL 조건식과 인덱스 구조를 조정합니다.
  5. 그래도 필요할 때 제한적으로 힌트를 사용합니다.

한 문장 요약

통계는 옵티마이저의 눈이고, 힌트는 방향 지시지만 둘 다 실제 데이터 변화 앞에서는 검증이 필요합니다.