Database/MySQL

인덱스 설계에 필요한 선택도와 카디널리티

BUST 2018. 6. 11. 22:25

선택도(Selectivity)

전체 대상 레코드 중에서 특정 조건에 의해 선택될 것으로 예상되는 레코드 비율을 말한다.

선택도 -> 카디널리티 -> 비용 -> 액세스 방식, 조인 순서,. 조인 방법 등 결정

                    1                          1
선택도 = --------------------- = --------------
          Distinct Value 개수     num_distinct


카디널리티 (Cardinality)

- 키다널리티(Cardinality)는 특정 액세스 단계를 거치고 나서 출력될 것으로 예상되는 결과 건수를 말하며, 아래와 같이 총 로우 수에 선택도를 곱해서 구한다.

카디널리티 = 총 로우 수 X 선택도



선택도, 카디널리티가 중요한 이유

-  하나의 키값에 여러개의 row가 맵핑이 되는 경우에는 SELECT시 인덱스를 안타고 Full-Scan을 타는 경우가 있을수가 있다. 옵티마이저의 엑세스 방식, 조인 순서를 결정을 하게 된다.
- 즉. 정확한 수치를 계산하는 것 보다는 인덱스의 효율성을 아는 것이 중요하기 때문에 선택도, 카디널리티가 중요하다.
- 복합인덱스를 만들때 조건을 통해 나오는 데이터가 카디널리티가 낮을수록 좋다. 

Reference

- http://wiki.gurubee.net/pages/viewpage.action?pageId=4948754


'Database > MySQL' 카테고리의 다른 글

Mysql Query Plan  (0) 2018.07.24
Mysql Index HInts  (0) 2018.07.24
Group By 쿼리의 활용  (0) 2018.06.09
MySQL 기본 Query 정리  (0) 2018.02.11
커버링 인덱스  (0) 2018.02.10