카디널리티(Cardinality)는 특정 데이터 집합의 유니크(Unique)한 값의 개수이다.
즉, 중복도가 ‘낮으면’ 카디널리티가 ‘높다’고 표현한다.
반대로 중복도가 ‘높으면’ 카디널리티가 ‘낮다’고 표현한다.
주민등록번호와 이름이라는 컬럼이 있는 테이블이 있다고 가정해보자.
주민등록번호는 값이 중복되지 않는 유일한(Unique) 값이다.
이름은 값이 중복되기도 하는 값이다.
그러므로 주민등록번호의 카디널리티가 이름의 카디널리티보다 높다.
DISTINCT를 사용했을 때의 출력값이 많을수록(사용 전후가 차이가 적을수록) 카디널리티도 높아진다.
선택도는 카디널리티로부터 계산할 수 있는 값이다. (선택도 = 카디널리티 / 총 레코드 수 * 100)
선택도는 데이터 집합에서 특정 값을 얼마나 잘 골라낼 수 있는지에 대한 지표이다.
전체 레코드 중에서 조건절에 의해 선택될 것으로 예상되는 레코드의 비율(%)이다.
선택도가 낮은 컬럼에 인덱스를 걸면 인덱스가 특정 레코드를 잘 골라내어 인덱스 효율이 높아진다.
한 컬럼의 선택도가 10% 라면 이 컬럼을 기준으로 WHERE 절을 사용했을 때 약 10%의 레코드가 조회된다는 뜻이다.
인덱스를 결정하는데 중요한 역할을 하기 때문이다.
카디널리티가 높고 선택도가 낮을수록(5% ~ 10% 적합) 인덱스를 사용하였을 때 높은 효율을 보여준다.
본문에 선택도가 낮은 컬럼에 인덱스를 걸어야한다고 되어 있는데 수정이 필요할 거 같습니다.