MongoDB에서 인덱스는 쿼리 성능을 향상 시키기 위해 사용하며 다양한 종류의 인덱스를 지원합니다.
아래는 주요 인덱스 종류와 그 특징에 대한 설명입니다.
단일 필드에 대해 인덱스를 생성하여, 특정 필드에 대한 쿼리 성능을 향상
db.collection.createIndex({ fieldname: 1 }) // 오름차순 인덱스
db.collection.createIndex({ fieldname: -1 }) // 내림차순 인덱스
두 개 이상의 필드를 결합하여 인덱스를 생성하여 쿼리 성능을 향상
db.collection.createIndex({ field1: 1, field2: -1 })
배열 내부의 요소들에 대해 인덱스를 생성하여 쿼리의 성능을 향상
db.collection.createIndex({ arrayField: 1 })
지리적 데이터에 대해 인덱스를 생성하여, 지리적 쿼리(예:근처의 장소 찾기)의 성능을 향상
종류는 2가지로 2dsphere, 2d가 있습니다.
2dsphere : 지구 표면 상의 데이터를 인덱싱
db.collection.createIndex({ location: "2dsphere" })
2d : 평면 좌표 데이터를 인덱싱
db.collection.createIndex({ location: "2d" })
텍스트 데이터에 대해 인덱스를 생성하여, 텍스트 검색의 성능을 향상
db.collection.createIndex({ description: "text" })
필드의 해시 값을 기반으로 인덱스를 생성하여, 샤딩 환경에서 데이터 분포를 고르게 하기 위해 사용
db.collection.createIndex({ fieldname: "hashed" })
모든 필드 또는 특정 패턴을 따르는 필드에 대해 인덱스를 생성하여, 동적 스키마를 가진 문서에서 필드를 자동으로 인덱싱하기 위해 사용
db.collection.createIndex({ "$**": 1 })
db.collection.createIndex({ "a.$**": 1 }) // 특정 패턴
일정 시간이 지나면 문서를 자동으로 삭제하는 인덱스를 생성
db.collection.createIndex({ createdAt: 1 }, { expireAfterSeconds: 3600 })
필드가 존재하는 문서만 인덱싱하여 선택적으로 전재하는 필드에 대해 인덱스를 생성할 때 사용
db.collection.createIndex({ fieldname: 1 }, { sparse: true })
특정 조건을 만족하는 문서만 인덱싱합니다. 부분 집합에 대해서만 인덱스를 생성하여 공간을 절약하고 성능을 향상
db.collection.createIndex({ fieldname: 1 }, { partialFilterExpression: { status: { $eq: "active" } } })