Zettelkasten

선택도와 카디날리티 차이

·수정 2026.04.23·수정 3

요약

카디날리티는 고유 값의 개수, 선택도는 조건을 만족하는 행의 비율이다. 인덱스 효율을 판단할 때 카디날리티가 높고 선택도가 낮은 컬럼이 좋다.

본문

정의

  • 카디날리티(Cardinality): 컬럼에 존재하는 고유 값의 개수
    • 높을수록 좋음 (예: user_id > gender)
  • 선택도(Selectivity): 조건을 만족하는 행의 비율
    • 낮을수록 좋음 (많이 걸러냄)
    • 계산: 카디날리티 / 전체 행 수

MySQL에서 확인하는 방법

1. SHOW INDEX로 카디날리티 확인

SHOW INDEX FROM 테이블명;
Column Cardinality
id 100000
status 5
user_id 50000

2. 직접 계산

-- 카디날리티
SELECT COUNT(DISTINCT column_name) FROM 테이블명;

-- 선택도
SELECT COUNT(DISTINCT column_name) / COUNT(*) FROM 테이블명;

3. EXPLAIN으로 실제 필터링 효율 확인

EXPLAIN SELECT * FROM orders WHERE status = 'pending';
  • rows: 예상 스캔 행 수
  • filtered: 조건 만족 비율 (%)

인덱스 설계 시 활용

-- 나쁜 예: 카디날리티 낮은 컬럼 단독 인덱스
CREATE INDEX idx_status ON orders(status);  -- 5개 값만 존재

-- 좋은 예: 카디날리티 높은 컬럼 우선
CREATE INDEX idx_user_status ON orders(user_id, status);

참고