Как этот запрос должен быть проиндексирован для повышения производительности - PullRequest
0 голосов
/ 03 июня 2018

У меня запрос MongoDB

Schema: Demo
{
  a: String,
  b: Number,
  c: Bool,
  d: Number
}

Query:
db.Demo.find({ a:'test', c: true }).sort({b:-1, d: -1}).limit(40).explain("executionStats")

Я пытался применить эти индексы:

ИНДЕКС ТИПА 1

  1. дБ.Demo.createIndex ({b-1, d: -1})
  2. db.Demo.createIndex ({a: 1})
  3. db.Demo.createIndex ({c: 1})

ИНДЕКС ТИПА 2

db.Demo.createIndex ({a: 1, c: 1, b: -1, d: -1})

MongoDB всегда игнорирует TYPE 2 index, поскольку отклоненные планы и используйте TYPE 1 Index.Но первый тип занимает больше времени, и я думаю, что он может быть более оптимизирован.

Объясните результаты по запросу типа 1.

....
"executionStats" : {
        "executionSuccess" : true,
        "nReturned" : 20,
        "executionTimeMillis" : 351,
        "totalKeysExamined" : 647,
        "totalDocsExamined" : 647,
} 

1 Ответ

0 голосов
/ 03 июня 2018

Найден идеальный индекс для запроса:

Это было объяснено в этом блоге

Оптимизация составных индексов MongoDB

Запрос будет db.Demo.createIndex({c:1, b:-1, d:-1, a:1})

...