Вопрос. У меня есть очень большая коллекция, которая индексируется по полю ts
: (отметка времени)
> db.events.ensureIndex({'ts': -1})
Я хочу получить последние 5 записей. Что меня удивляет, так это то, что запрос не использует индекс и поэтому очень медленный:
> db.events.find().sort({'ts': -1, '_id': -1}).limit(5)
Однако сортировка только по ts
или другому полю использует индекс, как и должно быть:
> db.events.find().sort({'ts': -1}).limit(5)
> db.events.find().sort({'_id': -1}).limit(5)
Это ошибка в MongoDB, это действительно задокументированная функция или я что-то не так делаю?
Дополнительная информация:
> db.events.find().sort({'ts': -1, '_id': -1}).limit(5).explain()
{
"cursor" : "BasicCursor",
"nscanned" : 795609,
"nscannedObjects" : 795609,
"n" : 5,
"scanAndOrder" : true,
"millis" : 22866,
"nYields" : 73,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
}
}
> db.events.find().sort({'ts': -1}).limit(5).explain()
{
"cursor" : "BtreeCursor ts_-1",
"nscanned" : 5,
"nscannedObjects" : 5,
"n" : 5,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"ts" : [
[
{
"$maxElement" : 1
},
{
"$minElement" : 1
}
]
]
}
}