SECTION 4.5 인덱스
4.5.1 인덱스의 필요성
데이터를 빠르게 찾을 수 있는 장치 (책의 찾아보기와 동일한 개념)

- 인덱스를 설정하면 전체 탐색 없이 원하는 데이터에 빠르게 접근 가능
4.5.2 B-트리
- 인덱스는 보통 B-트리(Balanced Tree) 자료 구조로 구성
- 구성: 루트 노드 → 브랜치 노드 → 리프 노드
- 탐색 시 루트부터 시작해 리프 노드까지 내려가며 값을 비교


대수확장성
트리 깊이가 리프 노드 수에 비해 매우 느리게 성장하는 특성
- 깊이가 1 증가할 때마다 최대 인덱스 항목 수는 4배 증가
| 트리 깊이 | 인덱스 항목 수 |
|---|---|
| 3 | 64 |
| 5 | 1,024 |
| 7 | 16,384 |
| 10 | 1,048,576 |
→ 깊이 10짜리 트리로 100만 개 레코드 검색 가능
4.5.3 인덱스 만드는 방법
MySQL
| 종류 | 생성 방법 | 특징 |
|---|---|---|
| 클러스터형 인덱스 | PRIMARY KEY 또는 UNIQUE NOT NULL |
테이블당 1개, 성능 더 좋음 |
| 세컨더리 인덱스 | CREATE INDEX ... |
여러 개 가능, 다양한 필드 쿼리에 사용 |
MongoDB
- 도큐먼트 생성 시 ObjectID가 기본키로 자동 설정
- 세컨더리키를 추가해 복합 인덱스 설정 가능
4.5.4 인덱스 최적화 기법(MongoDB 기반)
1. 인덱스는 비용이다
- 인덱스 탐색 시 인덱스 리스트 → 컬렉션 순으로 두 번 탐색 (읽기 비용 증가)
- 컬렉션 수정 시 인덱스도 수정 필요 → B-트리 균형 조절 비용 발생
- 무작정 모든 필드에 인덱스 설정은 비효율적
- 가져와야 하는 데이터 양이 많을수록 인덱스가 오히려 비효율
2. 항상 테스팅하라
- 서비스 특징(서비스에서 사용하는 객체 깊이, 데이터 양)에 따라 최적화 기법이 달라짐
explain()함수로 쿼리 실행 후 소요 시간 측정·최소화
3. 복합 인덱스 생성 순서: 같음 → 정렬 → 다중 값 → 카디널리티
- 같음(==): equal 비교 쿼리 필드를 가장 먼저 인덱스로 설정
- 정렬: 정렬에 쓰는 필드를 그다음 인덱스로 설정
- 다중 값:
>,<등 범위 쿼리 필드는 나중에 설정 - 카디널리티: 유니크한 값이 많은(카디널리티 높은) 필드를 우선 설정
- 예:
agevsemail→ email의 카디널리티가 더 높으므로 email 먼저
- 예:
'STUDY' 카테고리의 다른 글
| SECTION 5.1 복잡도 (0) | 2026.03.25 |
|---|---|
| SECTION 4.6 조인의 종류 4.7 조인의 원리 (0) | 2026.03.18 |
| SECTION 4.4 데이터베이스의 종류 (0) | 2026.03.18 |
| SECTION 4.3 트랜잭션과 무결성 (0) | 2026.03.10 |
| SECTION 4.2 ERD와 정규화 과정 (0) | 2026.03.10 |