본문 바로가기
Etc

DB 인덱싱 전략

by 당리 2025. 1. 5.

1.Index key size

MySQL InnoDB 테이블의 각 row의 데이터는 페이지들 안에 나뉘어서 저장된다.
인덱스 역시 페이지 단위로 관리 된다.

페이지는 16KB 로 크기가 고정.

인덱스의 자식 노드의 개수는 페이지의 크기와 값에 의해 결정된다.
키값의 크기가 증가하면, 읽어야 할 페이지가 늘어 나고 결국 디스크를 읽는 횟수가 증가한다.

그리고 인덱스 키 값이 증가되면 캐시에 저장할 수 있는 인덱스의 갯수 또한 줄어든다. 결국은 메모리의 효율도 떨어질 수 있다.

인덱스 값의 크기가 증가하면
->
페이지 내의 인덱스의 갯수가 줄어들고
->
디스크를 읽어야할 횟수가 증가하며
->
캐시에 저장할 있는 인덱스의 갯수도 줄어든다.
->
인덱스의 키는 길면 길수록 성능이 안좋을 있다.

 

 

2.Cardinality

카디널리티(Cardinality)란 집합원의 갯수.
예를 들어 지역, 성별 등은 카디널리티가 낮다.
반대로 id, 계좌번호 등은 카디널리티가 높다.

1)1개의 컬럼 인덱싱

결론적으로 카디널리티가 높은 것을 인덱싱 하면 좋다.
성별을 인덱싱 하면, 50퍼 밖에 거르지 못한다.

2)여러 개의 컬럼 인덱싱

카디널리티가 높은순에서 낮은순으로 구성하자.

 

3.update 빈도

update가 발생하면 index를 갱신하기 때문에 성능에 좋지 않다.
수정 빈도가 적은 컬럼으로 결정하자.
꼭 필요한 경우에는 결합 인덱스로 하자.

 

*자주 조합되는 경우

결합인덱스를 만들자.

*join

기본키나 외래키 처럼 조인의 연결고리가 만한 컬럼들을 인덱싱 하자.

 

 

고려사항.

새로 추가된 인덱스는 기존 인덱스에 영향을 미칠 수 있다.
-> 가능한 기존 인덱스는 변경하지 말자.

지나치게 많은 인덱스는 오버헤드 가능성이 있다.
넓은 범위를 인덱스로 처리하면 오버헤드 가능성이 이따.

대부분의 경우 가장 좋은 하나의 인덱스만 사용하는 것이 여러 개의 인덱스를 사용하는 것보다 좋다.

 

 

'Etc' 카테고리의 다른 글

웹훅이란?  (0) 2025.01.12
필수 Index 전략 4가지  (0) 2025.01.05
멀티 모듈을 사용하는 이유  (0) 2024.12.29
병렬처리가 효과적인 경우  (0) 2024.12.22
이클립스 localhost is already in use 에러 해결방법  (0) 2024.12.15