반응형
4.5.1 인덱스의 필요성
- 핵심 역할: 원하는 데이터를 빠르게 찾기 위해 사용.
4.5.2 B-트리
- 인덱스는 보통 B-트리 자료구조를 기반으로 구성.
- 구조:
- Root Node: 트리의 최상위 노드.
- Branch Node: 중간에 위치하는 노드.
- Leaf Node: 데이터가 실제로 저장된 노드.
- 특징:
- 데이터가 커질수록 깊이가 증가.
- 깊이가 1 증가하면, 최대 인덱스 항목 수가 4배 증가(2의 제곱 꼴로 증가).
4.5.3 인덱스 만드는 방법
MySQL
- 클러스터형 인덱스
- Primary Key 옵션으로 기본키를 생성하면 클러스터형 인덱스가 자동 생성됨.
- 세컨더리 인덱스
- UNIQUE NOT NULL 옵션으로 생성 가능.
- 특징:
- 보조 인덱스로 여러 필드 값을 기반으로 쿼리를 최적화.
MongoDB
- ObjectID
- 기본적으로 PK(ObjectID)를 자동 설정.
- 세컨더리 인덱스
- 필요에 따라 부가적으로 설정 가능.
- 복합 인덱스
- 필드 조합으로 복합 인덱스를 설정하여 성능 최적화.
4.5.4 인덱스 최적화 기법
- 인덱스 생성과 활용은 데이터 구조와 쿼리 특성에 따라 달라지며, 항상 최적화된 방식으로 설계해야 함.
- 구체적인 최적화 기법은 서비스 특성과 데이터 패턴에 따라 다양하게 적용 가능.
1. 인덱스는 비용이다
- 인덱스는 데이터를 두 번 탐색하므로 비용이 발생:
- 탐색 비용: 데이터를 조회할 때 두 번 탐색해야 하므로 비용이 증가.
- 수정 비용: 데이터 삽입, 수정, 삭제 시, 인덱스 또한 갱신되므로 추가적인 비용 발생.
- 분산된 데이터: 트리의 높이가 증가하면 탐색 비용 증가.
- 모든 필드에 무작정 인덱스를 추가하면 오히려 성능 저하를 유발할 수 있음.
2. 항상 테스트하라
- 인덱스 최적화는 서비스의 데이터 구조와 테이블 크기에 따라 다름.
- EXPLAIN 명령어:
- 쿼리 실행 전에 인덱스 사용 계획을 확인하는 데 유용.
- 테스트를 통해 실제 성능에 영향을 미치는 요소를 파악 후 최적화.
3. 복합 인덱스 생성 순서
- 복합 인덱스 생성 시 순서가 매우 중요:
- 같음(Equal 조건): 비교에서 동일 조건을 먼저 처리할 수 있도록 설정.
- 정렬 조건(Order By): 정렬 조건에 사용되는 컬럼을 인덱스에서 우선 처리.
- 다중 값 및 범위 조건:
- 범위 검색(>, <, BETWEEN)에 사용되는 컬럼은 마지막에 설정.
- 예시:
- email과 age 필드가 있을 경우:
- 정렬 기준이 email이라면 먼저 email로 인덱스를 설정.
- 이후 age 순으로 추가 설정.
- email과 age 필드가 있을 경우:
반응형
'SW개발 > 면접을 위한 CS 전공지식 노트' 카테고리의 다른 글
4.7 조인의 원리 (1) | 2025.01.22 |
---|---|
4.6 조인의 종류 (0) | 2025.01.22 |
4.4 데이터베이스의 종류 (3) | 2025.01.22 |
4.3 트랜잭션과 무결성 (1) | 2025.01.21 |
4.2 ERD와 정규화 과정 (0) | 2025.01.21 |