У меня есть коллекция Mon go с 2 полями, оба являются датами. У меня также есть следующие индексы:
{date1: 1}
{date2: 1}
Если я выполняю следующий запрос, он выполняется быстро и выполняет IXSCAN с использованием индекса date2
в обратном порядке, как и ожидалось:
db.getCollection('foo').find({ date1: { '$gte': new Date() } }).sort({date2:-1}).limit(50)
Однако, если я в обратном порядке сортировки запрос становится очень медленным и вместо этого использует индекс date1
, а затем сортирует результат из части find
запроса.
Я также попытался добавить индекс {date1: 1, date2:1}
, который я хотел бы ожидается, что он будет использоваться как для извлечения, так и для сортировки, однако это не имеет значения.
Почему это так? Я ожидаю, что он будет использовать индекс для date2
, чтобы сначала выполнить ограничение таким же образом, независимо от порядка сортировки, и я также ожидал бы, что будет использоваться составной индекс.