#database #mongodb #performance #indexing
Вопрос:
У меня есть простая коллекция, содержащая два поля: метка времени и значение (с плавающей точкой). Мне нужно получить минимальные и максимальные значения в диапазоне временных меток.
Коллекция содержит около 10000000 документов.
Я добавил такие индексы, как {"value" : 1, "timestamp" : 1}
и {"value" : -1, "timestamp" : 1}
.
Запросы, такие как
db.getCollection('Sample').find({'timestamp' : {'$gte': 1714284644, '$lte': 1745820644}}).sort({'value':-1}).limit(1)
заняло около 1 секунды. Количество без ограничений показывает 525600 документов.
«Объяснить» показывает, что запрос покрыт одним из индексов. IXSCAN занимает большую часть времени.
Есть ли какой-нибудь способ ускорить этот запрос?
Комментарии:
1. Вы пробовали индексировать { «метка времени» : 1} или { «метка времени» : 1, значение: — 1}?
2. Может быть, стоит подумать о пристегивании: mongodb.com/blog/post/building-with-patterns-the-bucket-pattern
3. Я попытался использовать следующие индексы и их комбинации: { «метка времени» : 1} , { значение: — 1, «метка времени» : 1}, { значение: 1, «метка времени» : 1}, { значение: 2, «метка времени» : 1}.