Почему изменение порядка сортировки влияет на используемый индекс? - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть коллекция 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, чтобы сначала выполнить ограничение таким же образом, независимо от порядка сортировки, и я также ожидал бы, что будет использоваться составной индекс.

...