도구스개발

DB 인덱스 선택도 계산기

고유값 수와 전체 행 수를 입력하면 인덱스 선택도(distinct÷전체)를 계산하고 인덱스 효율을 가늠합니다.

선택도

0.95

높음 — 인덱스 효율이 좋습니다

선택도 (distinct ÷ 전체)0.95
조건 하나당 평균 매치 행 수1.1행
선택도 = 고유값 수 ÷ 전체 행 수입니다. 1.0(기본키처럼 모든 값이 서로 다름)에 가까울수록 인덱스 조건 하나로 행을 거의 정확히 골라낼 수 있고, 0에 가까울수록(성별처럼 값이 몇 종류뿐) 같은 값이 많이 중복돼 인덱스 효율이 떨어집니다.
고유값이 몰리는 정도(데이터 분포)는 반영하지 않은 평균 선택도입니다. 고유값이 많아도 그중 한 값에 행 대부분이 몰려 있으면 실제 인덱스 효율은 이 값보다 나쁠 수 있습니다.

사용 방법

  1. 1해당 컬럼의 고유(distinct)값 개수를 입력합니다.
  2. 2테이블 전체 행 수를 입력합니다.
  3. 3선택도와, 조건 하나가 평균 몇 행과 매치되는지 확인합니다.

자주 묻는 질문

선택도 = 고유값 수 ÷ 전체 행 수입니다. 1.0(예: 기본키, PK)에 가까울수록 값 하나로 행을 거의 정확히 하나만 골라낼 수 있어 "선택적"이고, 0에 가까울수록(예: 성별 컬럼) 같은 값이 많이 중복돼 "비선택적"입니다.

조건 하나에 매치되는 행이 많아지기 때문입니다. 예를 들어 선택도 0.5%(고유값 2개, 전체 100만행)인 성별 컬럼에 인덱스를 걸어도, 조건 하나당 평균 50만 행을 가리켜야 해 인덱스를 타고 흩어진 위치를 일일이 찾아가는 것(random I/O)보다 테이블을 처음부터 훑는 전체 스캔이 더 빠른 경우가 많습니다.

DB 엔진마다 세부 구현이 다릅니다. PostgreSQL·MySQL·Oracle 등은 각자의 통계 수집 방식(히스토그램·샘플링 등)으로 선택도를 추정하고, 이를 실행 계획(인덱스 스캔 vs 전체 스캔) 선택에 반영합니다. 이 계산기는 선택도의 정의만 계산하며, 특정 엔진의 옵티마이저 동작을 재현하지 않습니다.

이 계산기는 컬럼 하나의 선택도만 다룹니다. 복합 인덱스는 컬럼 순서·컬럼 간 상관관계에 따라 선택도가 단순 곱셈으로 나오지 않는 경우가 많아 범위 밖입니다.

알아두면 좋은 점

  • 선택도 = distinct 값 수 ÷ 전체 행 수라는 단일 수학적 정의를 그대로 계산합니다.
  • 고유값이 몰리는 정도(데이터 분포)는 반영하지 않습니다. 예를 들어 고유값 1,000개라도 그중 한 값에 행의 90%가 몰려 있으면 실제 인덱스 효율은 평균 선택도보다 훨씬 나쁠 수 있습니다.
  • 0.9 이상/0.1~0.9/0.1 미만 구간 구분은 실무에서 흔히 쓰는 경험적 기준이며, 엄격한 표준은 아닙니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 4일 · 결과는 참고용 추정치입니다.