質問: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
}
]
]
}
}