MongoDB 인덱스(Index)
2026년 5월 17일
- MongoDB 인덱스는 쿼리 성능을 높이기 위해 특정 필드에 B-Tree 구조로 색인을 만드는 기능이다.
- 인덱스 없이 컬렉션 전체를 순회(컬렉션 스캔)하면 데이터가 많을수록 성능이 급격히 저하된다.
- Spring Data MongoDB에서는 @Document의
@Indexed,@CompoundIndex어노테이션으로 선언한다.
인덱스 종류
| 종류 | 설명 | 선언 방법 |
|---|---|---|
| 단일 인덱스 (Single Field) | 하나의 필드 | @Indexed |
| 복합 인덱스 (Compound) | 두 개 이상 필드 | @CompoundIndex |
| 유니크 인덱스 (Unique) | 중복 불허 | @Indexed(unique = true) |
| TTL 인덱스 | 만료 시간 자동 삭제 | @Indexed(expireAfterSeconds = N) |
| 텍스트 인덱스 (Text) | 전문 검색 | @TextIndexed |
| 해시 인덱스 (Hashed) | 샤딩에 사용 | MongoDB CLI에서 설정 |
Spring Data MongoDB 어노테이션 사용
Java
복합 인덱스 설계
- 자주 함께 사용하는 필드는 복합 인덱스로 묶는다.
- 정렬 방향
1(오름차순) /-1(내림차순)을 쿼리 패턴에 맞춰 지정한다.
Java
인덱스 적용 확인 (MongoDB Shell)
JavaScript
주의사항
- 인덱스는 읽기 성능은 높이지만 쓰기 성능을 저하시킨다 (인덱스 갱신 오버헤드).
- 불필요한 인덱스는 제거한다.
@Indexed가 실제로 DB에 생성되려면spring.data.mongodb.auto-index-creation=true설정 또는@EnableMongoRepositories필요.