Database

[Database] Cardinality / Selectivity

root_bridger 2023. 12. 5. 23:50

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  : 카디널리티, 선택도란 무엇인가?

잡학문구 : cardinality란?

Jay D : 데이터 분석 - 카디널리티(Cardinality)

Just try it! : [MySQL] 카디널리티 Cardinality

이로운 개발하기 : MYSQL INDEX 실무 활용하기

로직과의 사투 : 쿼리튜닝 겉핥기 - 인덱스의 사용 (MySQL위주)

d3fault.log : 인덱스와 카디널리티

홍찬기 : Mysql 인덱스

코딩장이 : [database] 카디널리티(cardinality)란?

professional : 카디널리티(cardinality)와 선택도(selectivity)