MongoDB文档建议:
排序列必须是索引中使用的最后一列
这是示例:
db.foo.ensureIndex({a: 1, b: 1, c: 1})
好的:
find(a=1).sort(a)
find(a=1).sort(b)
find(a=1, b=2).sort(c)
坏的:
find(a=1).sort(c)
even though c is the last column used in the index, a is that last column used, so you can only sort on a or b.
有人可以解释一下吗?为什么find(a=1).sort(c)
被认为是坏的?
将索引想象成电话簿的业务部分。
有多个级别的排序:
a
将是类别,例如“医生”b
将是姓氏,例如“Smith”c
将是名字,例如“John”列表(行)按类别 -> 姓氏 -> 名字的顺序排序
使用此模型,您如何在
John
不知道姓氏的情况下找到有名字的医生?答案是,您不能不查看每条记录(这意味着不使用索引)。在您的工作示例中,您使用从左到右的所有字段而不跳过任何级别。
在您的非工作示例中,您正在寻找最后一个字段和第一个字段,而中间什么都不知道。如果不知道中间是什么,就无法到达最后一个级别。