Как ускорить запрос mongo для получения минимальных и максимальных значений в диапазоне?

#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}.