Я оцениваю производительность следующего запроса.
db.products_old.find({ regularPrice: { $lte: 200 } })
В собрании содержится чуть более миллиона документов, всего около 0,15 ГБ.
Нет индексов
Это ожидается. Полное сканирование столбца должно быть сделано
"executionTimeMillis" : 1019,
"winningPlan" : {
"stage" : "COLLSCAN",
"filter" : {
"regularPrice" : {
"$lte" : 200
}
},
"direction" : "forward"
},
Индекс {регулярная цена: 1}
"executionTimeMillis" : 2842,
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"regularPrice" : 1
},
"indexName" : "regularPrice_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"regularPrice" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"regularPrice" : [
"[-inf.0, 200.0]"
]
}
}
},
Теперь он использует индекс, но время выполнения заметно хуже. Почему?
Кроме того, если производительность хуже, почему Монго не использует COLLSCAN
вместо индекса, который замедляет выполнение? rejectedPlans
пусто, что говорит о том, что никакой другой план даже не рассматривался. Почему?
Вот полный allPlansExecution
вывод.