Cardinality
- SQL에서 카디널리티 : 데이터 집합에서 유니크(unique)한 원소 개수(테이블의 '성별' 칼럼에 값이 남,여 두가지밖에 없다면 카디널리티는 2)
- 데이터 모델링에서 카디널리티 : 한 테이블이 다른 테이블과 가질 수 있는 관계(일대일, 다대다, 일대다, 다대일)
- 보통 카디널리티라고 하면 주어진 테이블에 있는 열의 카디널리티를 뜻하는 경우가 많음. (이는 해당 열에 대한 테이블에 나타나는 고유한 값의 수를 나타낸다.)
- 카디널리티는 상대적인 개념이며, 모든 열의 데이터가 고유하다면 high-cardinality 하다고 표현한다.
- 즉, 카디널리티는 해당 컬럼의 중복된 수치를 뜻하기 때문에 해당 테이블의 해당 컬럼의 값이 얼마나 중복되었는지 조회함으로 카디널리티를 알 수 있다.
-
SELECT COUNT(DISTINCT 컬럼) FROM 테이블;
-
MYSQL에서 Index와 Cardinality
- 중복도가 높을 수록 카디널리티가 낮아지고, 여러 컬럼을 인덱스로 설정하는 경우(compound index), 카디널리티가 높은 순부터 낮은 순으로 구성하는 것이 좋다.
- 이는 카디널리티가 높은(중복도가 낮은) 순으로 조회하기 때문이다.
- MySQL에서는 인덱스를 조회할 때 카디널리티를 확인할 수 있다.
-
SHOW INDEX FROM 테이블명;
-
Selectivity
- 데이터 집합에서 특정 값을 얼마나 잘 골라낼 수 있는지에 대한 지표
- 테이블의 특정 열을 기준으로 해당 열의 조건절(WHERE 절 조건문)에 따라 선택되는 데이터 비율을 의미
- 선택도가 낮다 : 해당 열에 중복되는 데이터가 많음
- 선택도가 높다 : 해당 열에 중복되는 데이터가 적음
- 이렇기 때문에 선택도는 데이터베이스에서 인덱스로 지정할 컬럼을 고를 때 사용한다.
- 선택도 계산 방법
-
선택도 = 선택한 데이터 건수 / 전체 데이터 건수
-
참고자료
월급쟁이 경제적 자유 : Cardinality vs selectivity (카디널리티와 선택도의 차이)
yangsijun528.log : 카디널리티, 선택도란 무엇인가?
Jay D : 데이터 분석 - 카디널리티(Cardinality)
Just try it! : [MySQL] 카디널리티 Cardinality
이로운 개발하기 : MYSQL INDEX 실무 활용하기
로직과의 사투 : 쿼리튜닝 겉핥기 - 인덱스의 사용 (MySQL위주)