인덱싱 및 성능

70_Lecture/MongoDB
공유하기:

인덱싱 및 성능

1. 인덱스 유형 (Index Types)

  • 단일 필드 (Single Field): 하나의 필드에 대해 생성.
  • 복합 인덱스 (Compound Index): 두 개 이상의 필드를 조합. 필드의 순서가 중요함.
  • 멀티키 (Multikey): 배열 필드 내의 요소들을 인덱싱.
  • TTL (Time-To-Live): 특정 시간 후 문서를 자동으로 삭제 (날짜 필드 대상).
  • 텍스트 (Text): 문자열의 키워드 검색 지원.
  • 해시 (Hashed): 필드 값을 해싱하여 저장. 주로 샤드 키로 사용.

2. 쿼리 최적화와 Explain Plan

쿼리 성능을 분석하기 위해 .explain() 메소드를 사용합니다.

  • COLLSCAN: 전체 컬렉션 스캔 (인덱스 없음 - 성능 저하).
  • IXSCAN: 인덱스 스캔 (효율적).
  • Covered Query: 데이터 원본에 접근하지 않고 인덱스만으로 쿼리 결과 반환.

3. ESR (Equality, Sort, Range) 규칙

복합 인덱스 생성 시 필드 배치 순서의 황금률입니다.

  1. Equality: 정확히 일치하는 필드를 가장 앞에.
  2. Sort: 정렬 기준 필드를 중간에.
  3. Range: 범위 쿼리(gt,gt, lt 등) 필드를 마지막에.

4. 실습 명령어

// 인덱스 생성 (1: 오름차순, -1: 내림차순)
db.users.createIndex({ age: 1 })
 
// 복합 인덱스 생성
db.users.createIndex({ name: 1, age: -1 })
 
// 생성된 인덱스 확인
db.users.getIndexes()
 
// 실행 계획 확인
db.users.find({ age: 25 }).explain("executionStats")

5. 시험 팁 (Certification Tips)

  • Covered Query의 조건을 암기하세요 (인덱스에 모든 필드 포함 & _id 미출력 등).
  • 복합 인덱스에서 선행 필드가 포함되지 않은 쿼리는 해당 인덱스를 활용할 수 없습니다.
  • TTL 인덱스는 고정 기간 데이터 유지 관리에 필수적입니다.

6. 베스트 프랙티스

  • 과도한 인덱스 생성은 쓰기 작업 부하를 증가시킵니다. 쓰기와 읽기 비율을 고려하세요.
  • 메모리(RAM)에 인덱스가 모두 올라올 수 있도록 관리하는 것이 중요합니다.