4.5 인덱스
2026-06-08
스터디를 함께 진행했음
인덱스 : 데이터를 빠르게 찾을 수 있는 장치
B-트리
인덱스는 보통 B-트리라는 자료 구조로 이루어져 있다.
참고 : https://johngrib.github.io/wiki/algorithm/b-tree/
인덱스가 효율적인 이유
균형 잡힌 트리 구조와 트리 깊이의 대수확장성 때문
트리 깊이의 대수확장성 : 트리 깊이가 리프 노드 수에 비해서 느리게 확장되는 것
인덱스 만드는 방법
MySQL
클러스터형 인덱스와 세컨더리 인덱스가 있다. 클러스터형 인덱스는 테이블당 하나 설정 가능.
기본키로 만들면 클러스터형 인덱스. 기본키로 만들지 않고도 unique not null 옵션을 붙이면 클러스터형 인덱스로 만들 수 있다.
세컨더리 인덱스는 보조 인덱스로 여러 개의 필드 값을 기반으로 쿼리를 많이 보낼 때 생성해야 하는 인덱스. 하나의 인덱스를 사용하는 것 보다 성능이 떨어지긴 하지만, 다양한 필드를 기반으로 쿼리를 보내야 할 때는 세컨더리 인덱스를 사용해야 한다.
MongoDB
도큐먼트를 만들면 자동으로 ObjectID가 부여되고 이 키가 기본키로 설정된다.
세컨더리 키도 부가적으로 설정해서 기본키와 세컨더리 키를 같이 쓰는 복합 인덱스도 설정할 수 있다.
인덱스 최적화 기법
MongoDB를 기반으로 설명
- 인덱스도 비용이다.
- 인덱스를 사용하면 무조건 두번 탐색해야 한다.
- 컬렉션 수정 시 인덱스도 수정해야 한다.
- B-트리의 높이를 균형있게 유지하는 비용
- …
- 항상 테스트하자.
- 인덱스 최적화 기법은 서비스 특징에 따라 다르다. 그래서 테스트가 중요함
- 인덱스를 만들고, 쿼리를 보낸 이후에 explain() 함수로 실행 계획을 분석하여 걸리는 시간을 최소화해야 함
- 복합 인덱스는 같음, 정렬, 다중 값, 카디널리티 순이다.
- 복합 인덱스는 생성 순서에따라 인덱스 성능이 달라진다.