DB 인덱스 선택도 계산기
고유값 수와 전체 행 수를 입력하면 인덱스 선택도(distinct÷전체)를 계산하고 인덱스 효율을 가늠합니다.
개
행
선택도
0.95
높음 — 인덱스 효율이 좋습니다
선택도 (distinct ÷ 전체)0.95
조건 하나당 평균 매치 행 수1.1행
선택도 = 고유값 수 ÷ 전체 행 수입니다. 1.0(기본키처럼 모든 값이 서로 다름)에 가까울수록 인덱스 조건 하나로 행을 거의 정확히 골라낼 수 있고, 0에 가까울수록(성별처럼 값이 몇 종류뿐) 같은 값이 많이 중복돼 인덱스 효율이 떨어집니다.
고유값이 몰리는 정도(데이터 분포)는 반영하지 않은 평균 선택도입니다. 고유값이 많아도 그중 한 값에 행 대부분이 몰려 있으면 실제 인덱스 효율은 이 값보다 나쁠 수 있습니다.
사용 방법
- 1해당 컬럼의 고유(distinct)값 개수를 입력합니다.
- 2테이블 전체 행 수를 입력합니다.
- 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 미만 구간 구분은 실무에서 흔히 쓰는 경험적 기준이며, 엄격한 표준은 아닙니다.
함께 보면 좋은 도구
시간복잡도입력 크기를 넣으면 O(1)부터 O(n!)까지 아홉 가지 시간복잡도의 연산 횟수와 예상 실행 시간을 한눈에 비교합니다.순환복잡도 계산제어흐름그래프의 노드·간선·연결요소 수를 넣으면 McCabe 순환복잡도 V(G)=E−N+2P를 구하고 위험도와 최소 테스트 케이스 수를 보여줍니다.gitignore 판정.gitignore 규칙과 경로를 넣으면 그 파일이 무시되는지, 어느 줄이 마지막으로 이겼는지 알려줍니다.울프람 규칙규칙 번호 0~255를 8비트로 풀어 세 칸 이웃에 대응시키고 세대를 쌓아 무늬를 그립니다.2-SAT「둘 중 하나는 참」인 조건을 여럿 넣으면 참·거짓 배정이 가능한지 판정하고 배정을 하나 찾아 줍니다.
마지막 검증: 2026년 9월 4일 · 결과는 참고용 추정치입니다.