如果我有这样的复合索引:{ a: -1, b: -1, c: -1 }
我可以排序{ a: 1, b: 1, c: 1 }
并仍然使用复合索引吗?本质上,保持顺序和相对排序相同,只是顺序相反。
问问题
89 次
1 回答
2
是的,MongoDB 可以使用复合索引对索引键进行反向排序。
如果您有一个复合索引:
db.test.ensureIndex({a: -1, b: -1, c: -1})
结果explain
表明BTreeCursor
使用了 a
db.test.find().sort({a: 1, b:1, c:1}).explain()
"cursor" : "BtreeCursor a_-1_b_-1_c_-1 reverse",
"isMultiKey" : false,
"n" : 11,
"nscannedObjects" : 11,
"nscanned" : 11,
"nscannedObjectsAllPlans" : 11,
...
如果您颠倒所有索引前缀的排序顺序,将使用复合索引。
但是,db.test.find().sort({a:1, b: 1, c: -1})
, 将无法使用索引,因此将使用BasicCursor
.
于 2013-10-08T16:19:00.267 回答