Real Mysql 8.0 : Cardinality

minseok·2023년 4월 24일
0








Cardinality

1. 어떤 것을 Index로 설정해야 좋을까?

Table의 column중에서 Cardinality가 높은 값을 우선순위로 Index를 설정할 수 있습니다.

  1. Cardinality은 유니크한 값의 수를 의미
  2. 중복도가 높으면 Cardinality가 낮다, 중복도가 낮으면 Cardinality가 높다고 표현 (상대적인 표현)

사람의 주민등록번호, 성별, 이름을 기준으로 Cardinality순위는 주민등록번호 > 성별 > 이름입니다.
복합키에도 Cardinality 순서로 키를 만드는 것이 좋습니다.

Cardinaltiy수치는 MySQL기준으로 SHOW INDEX FROM TABLENAME으로 확인할 수 있습니다.

B+-Tree 자료구조를 사용하는 Index Key의 경우 Records Insert, Update, Delete Operation에서 추가적인 연산이 들어가며 너무 많은 Index Key를 설정하는 경우 추가, 수정쿼리에서 성능이 낮아질 수 있습니다.


2. Cardinality가 낮은 컬럼

시나리오
아이폰은 1만개가 있고 기종이 SE2면서 용량이 64GB인 아이폰을 찾자

경우 1 기종의 Cardinality 수치가 10
경우 2 기종의 Cardinality 수치가 1000

경우 1은 Cardinality가 10입니다.
1만개의 아이폰에서 종류가 10가지만 존재합니다.
이말은 어떤 기종을 찾는다 해도 무조건 10000/10개의 개수가 나왔으며 발견된 1000개의 아이폰에서 64GB용량을 가진 것을 찾아야 합니다.
만약 64GB가 1개가 나왔다면 나머지 999개를 버려야 합니다.

경우2는 Cardinality가 1000입니다.
1만개의 아이폰에서 종류가 1000가지가 존재합니다.
그러면 어떤 기종을 찾는다 해도 10000/1000개의 개수가 나오며 발견된 10개의 아이폰에서 64GB용량을 가진 것을 찾아야 하는데
1개가 나왔다면 9개만 버려도 되는 것 입니다.





https://en.wikipedia.org/wiki/Cardinality_(SQL_statements)
https://orangematter.solarwinds.com/2020/01/05/what-is-cardinality-in-a-database/
https://logicalread.com/mysql-index-cardinality-mc12/#.ZEcUDOxBxhE
https://severalnines.com/blog/understanding-indexes-mysql-part-three/

profile
즐겁게 개발하기

0개의 댓글