MongoDB开发人员的提示和技巧中的提示#25是否正确?
它说这个查询:
collection.find({"x" : criteria, "y" : criteria, "z" : criteria})
可以使用
进行优化collection.ensureIndex({"y" : 1, "z" : 1, "x" : 1})
我认为这是错误的,因为要工作,x应该在前面。我认为索引的顺序很重要。
那我哪里出错了?
答案 0 :(得分:3)
索引中字段的顺序仅在查询不包含索引中的所有字段时才有意义。此查询引用所有三个字段,因此索引中字段的顺序无关紧要。
在the docs on compound indexes中查看更多详情。
find
查询对象中字段的顺序不相关。
答案 1 :(得分:0)
书籍陈述了以下情景
您需要运行3个查询:
Collection.find({x:criteria, y:criteria,z:criteria})
Collection.find({z:criteria, y:criteria,w:criteria})
Collection.find({y:criteria, w:criteria })
使用
collection.ensureIndex({y:1,z:1,x:1})
正在考虑事件的发生,并且当y的出现更多时,它希望所有查询都命中y后跟z,最后因为你将运行第一个查询比其他两个查询多一千倍,因此包括x,如果情况并非如此,您同样运行所有3个查询,然后建议
Collection.ensureIndex({y:1,w:1,z:1}) .
此外,根据MongoDB文档“复合索引中的字段顺序非常重要。”但在上述情况下,用例不同。它试图用一个索引优化所有用例查询。