users 테이블 예시

값이 덜 겹칠수록 인덱스는 더 적은 행만 읽는다

카디널리티는 고유 값의 수, 선택도는 조건에 걸리는 행 비율입니다. 100만 행 기준으로 보면 둘의 관계가 더 분명해집니다.

총 행 수

1,000,000

선택도는 이 전체 행 수 대비 비율입니다.

실무 기준

5~10%

이 이하이면 보통 인덱스가 유리합니다.

1. 카디널리티

고유 값 수가 많다

user_id, email처럼 거의 모든 값이 다름

2. 같은 값에 묶이는 행

한 값이 가리키는 행이 적다

후보 행 수가 바로 줄어듭니다.

3. 선택도

선택도가 낮다

WHERE 조건이 일부 행만 읽게 만듭니다.

4. 결과

인덱스 효과가 커진다

값이 많이 겹치면 Full Scan 쪽이 쉬워집니다.

대표 컬럼 고유 값 수 선택도와 읽는 범위 인덱스 판단

user_id · email

거의 1행만 정확히 찾는 조회

1,000,000

카디널리티 최고

0.0001%

약 1행만 읽음

최고

탐색 이점이 가장 큼

phone

거의 유일, 일부만 중복

990,000

매우 높음

0.0001%

대부분 약 1행 수준

높음

유일값과 거의 비슷

city

한 값에 여러 사용자가 묶임

200

중간

0.5%

약 5,000행

중간

조건에 따라 유리

status

활성, 휴면, 탈퇴처럼 종류가 적음

3

낮음

33%

약 330,000행

낮음

읽는 행이 많아 이득 감소

gender

거의 절반씩 나뉘는 저카디널리티

2

최저

50%

약 500,000행

매우 낮음

Full Scan이 더 단순할 수 있음

낮은 선택도 = 적은 행 접근 = 인덱스 효율 상승 선택도가 5~10%를 넘으면 너무 많은 행을 읽게 되어 순차 스캔이 더 빠를 수 있습니다.