"DB Index는 카디널리티
가 높아야 효율이 좋다." 라고한다. 근데 카디널리티 뜻을 찾아보면 정확한 정의가 없다. 때문에 내가 생각하는 카디널리티를 정의 부터 하겠다.
파파고 말대로 나는
카디널리티
는 아주 중요한 수(값)
라고 생각한다.
보통 중요한 값이라고 하면 기억을 하거나 메모를 해서 잊지 않고 빠르게 사용한다. 이걸 컴퓨터에도 적용해주는게 인덱스다.
카디널리티가 높다라는 건 중복도가 낮다라는 말이다. 즉, 카디널리티와 중복도는 반비례 관계다.
그럼 DB에서 인덱스는 왜 카디널리티가 높은 컬럼을 설정하는게 좋을까? 바로 중요한 수가 많기 때문이다.
사람 테이블을 만들어보자
이름 성별 주민등록번호 철수 남 110101-3333333 영수 남 120303-3332222 영희 여 120505-4441111 영희 여 150505-4234551 명제는
모든 값들은 중요하다
와인덱스는 중요한 값이 많은 컬럼이 효율적이다
이다.4명의 정보를 담고 있지만 컬럼의 중요한 값(cardinality)은 차이가 난다.
- 이름 : 모든 이름이 중요하니 철수, 영수, 영희는 중요하다 하지만 영희가 2명이니 중요한 값는 3개라고 본다.
- 성별 : 특수한 경우를 제외한다면 남, 여 뿐이므로 중요한 값은 2개다. 사람이 암만 많아도 중요한 값은 2개뿐인 카디널리티가 아주 낮은 컬럼이다.
- 주민등록번호 : 모든 사람이 고유하게 가지고 있어 사람 숫자 = 중요한 값이다. 여기선 4개가 되겠다.
여기서 중요한 값이 가장 많은 컬럼은 주민등록번호다. 즉, 주민등록번호 컬럼을 인덱스로 사용하면 효율이 좋다는걸 알 수 있다.
카디널리티는 상대적이다. A 보다 B의 카디널리티가 높다라고 생각하고 사용해야지 절대적으로 주민등록번호가 카디널리티가 가장 높다고 할 수 없다는 말이다.
한 줄평 : 카디널리티가 높다 낮다...를 나름대로 최대한 풀어서 설명해 봤다.