메타 필드 및 timeField에 보조 인덱스 추가
Time Series 컬렉션 에 대한 쿼리 성능을 개선하려면 하나 이상의 보조 인덱스 를 추가하여 일반적인 Time Series 쿼리 패턴을 지원합니다. 특히 timeField
및 metaField
로 지정된 필드에 하나 이상의 복합 인덱스 를 생성하는 것이 좋습니다.
metaField
필드의 필드 값이 문서인 경우 해당 문서 내부의 필드에 보조 인덱스를 생성할 수 있습니다.
참고
모든 인덱스 유형이 지원되는 것은 아닙니다. 지원되지 않는 인덱스 유형 목록은 Time Series 컬렉션의 세컨더리 인덱스에 대한 제한 사항을 참조하세요.
예를 들어, 이 명령은 metadata.sensorId
및 timestamp
필드에 복합 인덱스 를 생성합니다.
db.weather24h.createIndex({ "metadata.sensorId": 1, "timestamp": 1 })
세컨더리 인덱스를 사용하여 정렬 성능 향상
timeField
및 metaField
에 대한 정렬 작업은 성능을 개선하기 위해 해당 필드에 보조 인덱스를 사용할 수 있습니다.
예를 들어 다음 sensorData
컬렉션에는 온도 측정값이 포함되어 있습니다.
db.sensorData.insertMany( [ { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2022-01-15T00:00:00.000Z"), "temperatureReading": 12 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2022-01-15T04:00:00.000Z"), "temperatureReading": 11 }, { "metadata": { "sensorId": 5579, "type": "temperature" }, "timestamp": ISODate("2022-01-15T08:00:00.000Z"), "temperatureReading": 9 } ] )
다음 명령은 timestamp
및 metadata.sensorId
필드에 복합 오름차순 보조 인덱스를 생성합니다.
db.sensorData.createIndex( { "timestamp": 1, "metadata.sensorId": 1 } )
timestamp
필드에 대한 다음 정렬 작업은 인덱스를 사용하여 성능을 개선합니다.
db.sensorData.find().sort( { "timestamp": 1 } )
정렬 작업에 인덱스가 사용되었는지 확인하려면 .explain()
옵션을 사용하여 작업을 다시 실행합니다.
db.sensorData.find().sort( { "timestamp": 1 } ).explain()
winningPlan.queryPlan.inputStage.stage
은 IXSCAN
이며, 이는 인덱스가 사용되었음을 나타냅니다. 계획 설명 출력에 대한 자세한 내용은 결과 설명을 참조하세요.
Time Series 컬렉션에 대한 인덱스 힌트 지정
인덱스 힌트는 MongoDB가 쿼리에 특정 인덱스를 사용하도록 합니다. Time Series 컬렉션에 대한 일부 작업은 인덱스가 힌트에 지정된 경우에만 인덱스를 활용할 수 있습니다.
예를 들어 다음 쿼리는 MongoDB가 timestamp_1_metadata.sensorId_1
인덱스를 사용하도록 합니다.
db.sensorData.find( { "metadata.sensorId": 5578 } ).hint( "timestamp_1_metadata.sensorId_1" )
Time Series 컬렉션에서는 인덱스 이름 또는 인덱스 키 패턴을 사용하여 힌트를 지정할 수 있습니다. 컬렉션에서 인덱스 이름을 가져오려면 db.collection.getIndexes()
메서드를 사용합니다.
Time Series 보조 인덱스
MongoDB 6.0 (및 5.0.16)부터:
시간, 메타데이터 또는 측정 필드에 복합 인덱스 를 추가할 수 있습니다.
time series 컬렉션에서 부분 인덱스
와 함께
$geoWithin
,$in
및$or
연산자를 사용할 수 있습니다.time series 컬렉션 의 모든 필드에 부분 및 2dsphere 인덱스를추가할 수 있습니다.
참고
Time Series 컬렉션에 보조 인덱스가 있고 기능 호환성 버전(FCV)을 다운그레이드해야 하는 경우, 먼저 다운그레이드된 FCV와 호환되지 않는 보조 인덱스를 모두 삭제해야 합니다. setFeatureCompatibilityVersion
을 참조하세요.