MySQL - Index Cardinality

Index를 만들고 나서도 query가 너무 느려서 좀더 검색해밨는데 Cardinality때문이었다. Cardinality가 Index를 만드는데 아주 중요한 역할을 한다.

예를 들면Gender이라는 column에 값이 male과 female이 있다고 할 때 남자 50% 여자 50%의 비례로 분포되었다고 하면, cardinality가 2가 된다. 그 말인 즉, where gender = "male"로 검색했을때 100%의 row들을 검색하던 것이 50%가 된다는 뜻이다. 다시 말해서 그래도 엄청난 양의 row들을 scan해야 된다는 뜻....

varchar 유형의 column을 255btye로 끊여서 index를 만들었었는데 후에 들어오는 row의 값들이 길이가 늘어나면서 cardinality가 엄청나게 작은 수치로 되어서 얘들에 대해서는 검색이 엄청 늘어난 것이었다...


원문: https://webmonkeyuk.wordpress.com/2010/09/27/what-makes-a-good-mysql-index-part-2-cardinality/

1 comment: