users 테이블 예시
카디널리티는 고유 값의 수, 선택도는 조건에 걸리는 행 비율입니다. 100만 행 기준으로 보면 둘의 관계가 더 분명해집니다.
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이 더 단순할 수 있음 |