【发布时间】:2012-08-22 11:55:31
【问题描述】:
问题:
我有一个非常大的集合,由字段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
}
]
]
}
}
【问题讨论】:
标签: mongodb indexing mongodb-indexes