[CS]카디널리티(cardinality)의 개념

무지성개발자·2023년 8월 30일
0

카디널리티

"DB Index는 카디널리티가 높아야 효율이 좋다." 라고한다. 근데 카디널리티 뜻을 찾아보면 정확한 정의가 없다. 때문에 내가 생각하는 카디널리티를 정의 부터 하겠다.
파파고 말대로 나는 카디널리티아주 중요한 수(값)라고 생각한다.

보통 중요한 값이라고 하면 기억을 하거나 메모를 해서 잊지 않고 빠르게 사용한다. 이걸 컴퓨터에도 적용해주는게 인덱스다.

카디널리티와 인덱스

카디널리티가 높다라는 건 중복도가 낮다라는 말이다. 즉, 카디널리티와 중복도는 반비례 관계다.

그럼 DB에서 인덱스는 왜 카디널리티가 높은 컬럼을 설정하는게 좋을까? 바로 중요한 수가 많기 때문이다.

사람 테이블을 만들어보자

이름성별주민등록번호
철수110101-3333333
영수120303-3332222
영희120505-4441111
영희150505-4234551

명제는 모든 값들은 중요하다인덱스는 중요한 값이 많은 컬럼이 효율적이다 이다.

4명의 정보를 담고 있지만 컬럼의 중요한 값(cardinality)은 차이가 난다.

  • 이름 : 모든 이름이 중요하니 철수, 영수, 영희는 중요하다 하지만 영희가 2명이니 중요한 값는 3개라고 본다.
  • 성별 : 특수한 경우를 제외한다면 남, 여 뿐이므로 중요한 값은 2개다. 사람이 암만 많아도 중요한 값은 2개뿐인 카디널리티가 아주 낮은 컬럼이다.
  • 주민등록번호 : 모든 사람이 고유하게 가지고 있어 사람 숫자 = 중요한 값이다. 여기선 4개가 되겠다.

여기서 중요한 값이 가장 많은 컬럼은 주민등록번호다. 즉, 주민등록번호 컬럼을 인덱스로 사용하면 효율이 좋다는걸 알 수 있다.

주의할 점

카디널리티는 상대적이다. A 보다 B의 카디널리티가 높다라고 생각하고 사용해야지 절대적으로 주민등록번호가 카디널리티가 가장 높다고 할 수 없다는 말이다.


한 줄평 : 카디널리티가 높다 낮다...를 나름대로 최대한 풀어서 설명해 봤다.

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글