STUDY

SECTION 4.5 인덱스

Lim임 2026. 3. 18. 13:52

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. 복합 인덱스 생성 순서:  같음 → 정렬 → 다중 값 → 카디널리티

  1. 같음(==): equal 비교 쿼리 필드를 가장 먼저 인덱스로 설정
  2. 정렬: 정렬에 쓰는 필드를 그다음 인덱스로 설정
  3. 다중 값: >, < 등 범위 쿼리 필드는 나중에 설정
  4. 카디널리티: 유니크한 값이 많은(카디널리티 높은) 필드를 우선 설정
    • 예: age vs email → 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