以复合索引的相反顺序排序仍然有效?

时间:2013-10-08 15:50:58

标签: node.js mongodb mongoose

如果我有这样的复合索引:{ a: -1, b: -1, c: -1 }我可以按{ a: 1, b: 1, c: 1 }排序并仍然使用复合索引吗?基本上,保持顺序和相对排序相同,只是顺序相反。

1 个答案:

答案 0 :(得分:2)

是的,MongoDB可以使用复合索引对索引键进行反向排序。

如果你有一个复合索引:

 db.test.ensureIndex({a: -1, b: -1, c: -1})

explain的结果表明使用了BTreeCursor

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