본문 바로가기
DataBase/DataBase

MySQL 인덱스의 카디널리티 Index Cardinality

by d-e-v-j 2024. 10. 18.
반응형

카디널리티(Cardinality)는 인덱스에서 고유한 값의 수를 의미한다. 인덱스가 적용된 열에 얼마나 많은 고유 값이 존재하는 지를 나타낸다. 카디널리티는 데이터베이스 인덱스가 얼마나 효율적으로 작동할지를 결정하는 중요한 요소이다.

  • 카디널리티가 높다: 열에 고유한 값이 많다. 
  • 카디널리티가 낮다: 열에 고유한 값이 적다.

카디널리티와 인덱스 성능

카디널리티는 인덱스의 선택성과 밀접한 관계가 있다. 선택성(selectivity)은 인덱스를 통해 얼마나 효율적으로 원하는 데이터를 조회할 수 있는지를 나타낸다. 카디널리티가 높은 열에 인덱스를 적용하면, 쿼리가 더 적은 행을 읽어도 원하는 결과를 얻을 수 있어 성능이 향상된다.

  • 높은 카디널리티: 조회할 때 특정 값을 더 쉽게 찾을 수있어서, 인덱스의 선택성이 높아 쿼리의 성능이 좋아진다.
  • 낮은 카디널리티: 동일한 값이 많이 존재하기 때문에 인덱스가 있어도 많은 행을 읽어야 해서 성능이 크게 개선되지 않을 수 있다.

카디널리티 확인 방법

SHOW INDEX FROM 테이블명;

MySQL은 카디널리티를 샘플링하여 추정하기 때문에 정확한 값은 아니지만 대략적인 효율성을 파악 할 수 있다.


카디널리티에 따른 인덱스 설계

  1. 높은 카디널리티 필드: 고유 값이 많은 열에 인덱스를 생성. 인덱스의 성능이 향상되고 검색 속도가 빨라진다.
  2. 낮은 가디널리티 필드: 성능에 큰 도움이 되지 않을 수 있고, 오히려 인덱스가 많은 데이터를 필터링 하지 못하고 성능이 저하될 수 있다.
  3. 복합 인덱스: 여러개의 열을 조합해 복합 인덱스를 생성하는 경우, 첫 번째 열의 카디널리티가 높은것이 유리하다. 첫번째 열의 카디널리티가 낮으면 MySQL이 다른 열을 활용하기 전에 많은 데이터를 필터링해야하므로 성능이 떨어진다.

이렇듯 무조건 인덱스를 만든다고 성능이 좋아지는 것은 아니다. 고유값과 필요한 값들 위주로 깔끔하게 인덱스를 설정해보자

728x90
반응형
LIST