728x90
1. 인덱스의 필요성
- 인덱스란 데이터를 빠르게 찾을 수 있는 하나의 장치
- 인덱스를 설정하면 테이블에서 찾고자하는 데이터를 빠르게 검색 가능
2. B-트리
- 보통
B-트리자료 구조로 구성- 루트 노드 - 브랜치 노드 - 리프노드로 나뉨
- 인덱스는 1) 효율적인 단계를 거쳐 모든 요소에 접근할 수 있는 균형 잡힌 트리 구조 2) 트리 깊이의 대수확장성 때문에 효율적
대수확장성- 트리 깊이가 리프 노드 수에 비해 매우 느리게 성장하는 것
- 인덱스가 한 깊이씩 증가할 때마다 최대 인덱스 항목의 수는 4배씩 증가
3. 인덱스를 만드는 방법
인덱스를 만드는 방법은 DB마다 다르다.
1) MySQL
클러스터형 인덱스
- 테이블당 하나만 설정 가능
- PK 옵션으로 기본키를 만들면 클러스터형 인덱스 생성 가능
세컨더리 인덱스
- 보조 인덱스 → 여러 개의 필드 값을 기반으로 쿼리를 많이 보낼 때 생성해야 하는 인덱스
- PK 옵션으로 unique not null 옵션을 붙이면 세컨더리 인덱스 생성 가능
- create index … 의 명령어를 기반으로 생성시 세컨더리 인덱스 생성 가능
하나의 인덱스만 생성할 거면 클러스터형 인덱스를 만드는게 성능이 좋음
e.g.
[age]라는 필드로 쿼리를 보내면 클러스터형 인덱스로 충분.
[age], [name], [email] 등 다양한 필드로 쿼리 보내려면 세컨더리 인덱스 필요
2) MongoDB
- 도큐먼트 생성시 자동으로 ObjectID 형성 → 해당 키가 기본키로 설정
- 세컨더리키를 부가적으로 설정해야 PK와 세컨더리키 같이 쓰는 복합인덱스 설정 가능
3) MSSQL
4. 인덱스 최적화 기법
인덱스 최적화 방법은 DB마다 다르지만, 기본적인 골조는 동일
1) “인덱스는 비용이다”
- 인덱스 리스트 > 컬렉션 순으로 탐색하므로 인덱스는 두 번 탐색하도록 강요
- 컬렉션이 수정되면 인덱스도 수정되어야 함
(e.g. 책의 본문이 수정되면 목차/찾아보기가 수정되는 것) - 컬렉션에서 가져와야 하는 양이 많을수록 인덱스를 사용하는 건 비효율적
2) “항상 테스팅하라”
- 인덱스 최적화 기법은 서비스 특징에 따라 달라지므로 테스트가 중요
3) “복합 인덱스는 같음, 정렬, 다중 값, 카디널리티 순”
카디널리티: 유니크한 값의 정도
여러 필드를 기반으로 조회 시 복합 인덱스를 생성하는데, 이 인덱스를 생성할 때 순서가 있다 → 생성 순서에 따라 인덱스 성능이 달라짐
따라서 같음, 정렬, 다중 값, 카디널리티 순으로 생성해야 함!
728x90
'What I Learned > etc.' 카테고리의 다른 글
| [CS] 비선형 자료 구조 (0) | 2026.01.05 |
|---|---|
| [CS] 복잡도 (0) | 2026.01.05 |
| [CS] ERD와 정규화 과정 (1) | 2025.12.30 |
| [CS] CPU 스케줄링 알고리즘 (0) | 2025.12.24 |
| [CS] 메모리 관리 (0) | 2025.12.23 |