Если я запускаю запрос монго из оболочки с помощью объяснения (), получаю имя используемого индекса, а затем снова запускаю тот же запрос, но с указанием подсказки () того же индекса, который будет использоваться — поле «миллис» из плана объяснения значительно уменьшился
Например
без подсказки:
>>db.event.find({ "type" : "X", "active" : true, "timestamp" : { "$gte" : NumberLong("1317498259000") }, "count" : { "$gte" : 0 } }).limit(3).sort({"timestamp" : -1 }).explain();
{
"cursor" : "BtreeCursor my_super_index",
"nscanned" : 599,
"nscannedObjects" : 587,
"n" : 3,
"millis" : 24,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : true,
"indexOnly" : false,
"indexBounds" : { ... }
}
указана подсказка:
>>db.event.find({ "type" : "X", "active" : true, "timestamp" : { "$gte" : NumberLong("1317498259000") }, "count" : { "$gte" : 0 } }).limit(3).sort({"timestamp" : -1 }).hint("my_super_index").explain();
{
"cursor" : "BtreeCursor my_super_index",
"nscanned" : 599,
"nscannedObjects" : 587,
"n" : 3,
"millis" : 2,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : true,
"indexOnly" : false,
"indexBounds" : { ... }
}
Разница только в поле "миллис"
Кто-нибудь знает, почему это так?
ОБНОВЛЕНИЕ: «Выбор индекса для использования» не объясняет этого, потому что монго, насколько я знаю, выбирает индекс для каждого прогона X (100?), поэтому он должен быть таким же быстрым, как с подсказкой следующий (X-1) работает
"rejectedPlans" : [ { "stage" : "SKIP", "skipAmount" : 493, "inputStage" : {
против"rejectedPlans" : []
- person Sindhu   schedule 10.11.2020