索引的顺序在MongoDB中是否重要?

时间:2013-01-15 01:44:40

标签: mongodb

MongoDB开发人员的提示和技巧中的提示#25是否正确?

它说这个查询:

collection.find({"x" : criteria, "y" : criteria, "z" : criteria})

可以使用

进行优化
collection.ensureIndex({"y" : 1, "z" : 1, "x" : 1})

我认为这是错误的,因为要工作,x应该在前面。我认为索引的顺序很重要。

那我哪里出错了?

2 个答案:

答案 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文档“复合索引中的字段顺序非常重要。”但在上述情况下,用例不同。它试图用一个索引优化所有用例查询。