在MongoDB中索引的顺序重要吗?

在MongoDB中索引的顺序重要吗?,mongodb,Mongodb,MongoDB开发人员技巧中的技巧25正确吗 它说这个查询: collection.find({"x" : criteria, "y" : criteria, "z" : criteria}) 可以使用 collection.ensureIndex({"y" : 1, "z" : 1, "x" : 1}) 我认为这是错误的,因为要让它起作用,x应该在前面。我认为索引的顺序很重要 那么我哪里出错了呢?只有当查询没有包括索引中的所有字段时,索引中字段的顺序才重要。此查询引用所有三个字段,因此索引

MongoDB开发人员技巧中的技巧25正确吗

它说这个查询:

collection.find({"x" : criteria, "y" : criteria, "z" : criteria})
可以使用

collection.ensureIndex({"y" : 1, "z" : 1, "x" : 1})
我认为这是错误的,因为要让它起作用,x应该在前面。我认为索引的顺序很重要


那么我哪里出错了呢?

只有当查询没有包括索引中的所有字段时,索引中字段的顺序才重要。此查询引用所有三个字段,因此索引中字段的顺序无关紧要

请参阅中的更多详细信息


“查找查询”对象中字段的顺序不相关。

只有在查询未包括索引中的所有字段时,索引中字段的顺序才重要。此查询引用所有三个字段,因此索引中字段的顺序无关紧要

请参阅中的更多详细信息


“查找查询”对象中字段的顺序不相关。

书中说明了以下情况

您有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,最后是因为您将运行的第一个查询比其他两个查询多1000倍,因此包括x,如果不是这样,并且您平均运行所有3个查询,则建议是

Collection.ensureIndex({y:1,w:1,z:1}) . 

此外,根据MongoDB文档,“复合索引中字段的顺序非常重要。”但在上述情况下,用例是不同的。它试图用一个索引优化所有用例查询。

书中陈述了以下场景

您有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,最后是因为您将运行的第一个查询比其他两个查询多1000倍,因此包括x,如果不是这样,并且您平均运行所有3个查询,则建议是

Collection.ensureIndex({y:1,w:1,z:1}) . 

此外,根据MongoDB文档,“复合索引中字段的顺序非常重要。”但在上述情况下,用例是不同的。它试图用一个索引优化所有用例查询。

字典或关联数组没有任何顺序,因此{x:1,y:1}等价于{y:1,x:1}。@Blender。这在Python中是正确的,但在保留顺序的JavaScript中不是这样。这一顺序对ensureIndex很重要,尽管在这种特殊情况下不是这样。PyMongo通过为其ensureIndex方法使用有序对来解决这个问题。字典或关联数组没有任何顺序,因此{x:1,y:1}等价于{y:1,x:1}。@Blender。这在Python中是正确的,但在保留顺序的JavaScript中不是这样。这一顺序对ensureIndex很重要,尽管在这种特殊情况下不是这样。PyMongo通过为其ensureIndex方法使用有序对来解决这个问题。