У меня есть вопрос относительно сценария ниже. Рассмотрим совокупность элементов ниже:
{
transId : "123",
category : "A",
date : "2020-01-20"
}
category
имеет несколько возможных значений (A, B, C, D)
Мой запрос: 'Select * from DB where transId = "id" AND category is either A or B AND d1 < date < d2', then sort by date in descending order
. (Пожалуйста, пока игнорируйте правильность синтаксиса)
Итак, я придумаю составной индекс:
{transId : 1, category: 1, date: -1}
У меня вопрос, теряю ли я преимущество автоматической сортировки в Понедельник go?
Под этим подразумевается, скажем, критерий категории в запросе просто 'category = A', тогда mon go db может просто использовать префикс {transId : 1, category: 1}
для переход к набору дат (который уже отсортирован в порядке des c) и возвращает результаты на основе диапазона в критерии даты без какой-либо сортировки.
Однако в моем запросе, где category
может быть либо «A», либо «B», следовательно, mon go должен сначала найти два набора дат, а затем выполнить операцию сортировки с ними, чтобы получить окончательный результат, что намного менее оптимально, чем выше. (Является ли это толкованием того, что происходит правильно?)
Другой вопрос: какова наилучшая стратегия индекса для моего запроса?
Спасибо