у меня составной индекс:
{
"hidden" : 1,
"country" : 1,
"edited" : 1,
"changeset.when" : -1
}
И запрос:
{
"country" : "ua",
"edited" : true,
"hidden" : false,
"changeset.when" : { "$lt" : ISODate("5138-11-16T09:46:40Z") }
}
Работает хорошо и быстро. Теперь я хочу отсортировать результат по: { "changeset.when" : -1 }
, и он сильно замедляется. От ста миллисекунд до 15 секунд.
А вот объяснение запроса с сортировкой:
"winningPlan" : {
"stage" : "SORT",
"sortPattern" : {
"changeset.when" : -1
},
"limitAmount" : 15,
"inputStage" : {
"stage" : "SORT_KEY_GENERATOR",
"inputStage" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"hidden" : 1,
"country" : 1,
"edited" : 1,
"changeset.when" : -1
},
"indexName" : "edited_news",
"isMultiKey" : true,
"multiKeyPaths" : {
"hidden" : [ ],
"country" : [ ],
"edited" : [ ],
"changeset.when" : [
"changeset"
]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"hidden" : [
"[false, false]"
],
"country" : [
"[\"ua\", \"ua\"]"
],
"edited" : [
"[true, true]"
],
"changeset.when" : [
"(new Date(100000000000000), true)"
]
}
}
}
}
}
Почему это так медленно? Объясните, что он успешно использует необходимый индекс и поле changeset.when
находится в порядке убывания