중급

선택도 (Selectivity)

WHERE 조건이 전체 행 중 결과로 골라낼 비율 (0~1)

정의

특정 조건이 결과를 얼마나 좁히는지를 0과 1 사이의 값으로 표현한 것. 예를 들어 1만 명 중 100명이 통과하는 조건이면 선택도는 0.01(1%). 선택도가 낮을수록(=결과가 적을수록) 인덱스가 효과적이고, 선택도가 높을수록(=결과가 많을수록) Full Scan이 더 빠를 수 있다. 카디널리티의 역수와 비슷한 개념.

왜 중요한가?

옵티마이저는 선택도를 보고 인덱스를 쓸지 Full Scan을 할지 결정한다. WHERE 조건의 선택도가 5~10% 이상이면 보통 Full Scan이 더 빠르다. 인덱스가 있다고 무조건 빠른 게 아니라는 의미. 인덱스 설계 시 "이 조건이 정말 선택적인가?"를 따져봐야 한다.

틀리기 쉬운 포인트

  • !선택도가 높은 조건(결과가 많은 조건)에 인덱스를 만들어도 효과가 없습니다.
  • !복합 조건의 선택도는 각 조건 선택도의 곱이 아닙니다(컬럼 간 상관관계).
  • !선택도와 카디널리티를 혼동하지 마세요 — 선택도는 비율, 카디널리티는 개수.

예시

  -- 조건의 선택도 추정 --
WHERE status = 'ACTIVE' (전체의 80%) → 선택도 0.8 → Full Scan 유리 --
WHERE id = 12345 (전체의 0.001%) → 선택도 0.00001 → 인덱스 매우 유리

성능 포인트

!선택도 5~10%가 대략적인 인덱스/Full Scan 분기점. 더 정확한 값은 행 크기, 블록 크기, Clustering Factor 등에 따라 달라진다.

관련 개념

관련 문제 풀어보기

관련 카테고리