Mongo复合指数使用较少
我知道在MongoDB中,对于使用复合索引的查询,它必须使用索引中的所有键,或者至少从左侧开始键。 例如
db.products.find({ "a":"foo", "b":"bar" })
将愉快地使用由{a,b,c}组成的索引。
但是,如果我想查询:
db.products.find( {"a":"foo", "c":"thing" })
我相信这不能使用索引。 这可以通过在“b”上添加一个微不足道的条件来解决,例如
db.products.find( {"a":"foo", "b":{ $ne : "" }, "c":"thing" })
即使我实际上并不关心b的价值。 原因是我们目前有4500万个对象,并且它将继续增长,所以我们希望整合我们的索引以节省资源。
非常感谢。
通常,对多列索引的查询不足以限制其中一列的匹配,将限制多列索引的实用性。 在你的例子中,使用{"a":"foo", "b":{$ne:""}, "c":"thing"}
将限制{a,b,c}
索引匹配只在a
。 如果您的查询条件经常执行,请创建一个{a,c,b}
索引(如果b
不会用于查询条件{a,c}
则为{a,c}
)。
使用您的查询的explain
函数来查看是否正在充分利用索引。 如果explain
告诉你indexOnly
是true
,那么你的查询只使用索引来查找匹配的文档; 否则,MongoDB需要查看每个文档以查找匹配项。
有关更多信息,请参阅:
事实上,在使用较新的Mongo版本时,当对{a,c}进行查询时必须使用{a,b,c}索引,而对于b而言没有微不足道的条件。 我已经使用explain命令验证了这一点。
这里有一个详细的讨论:Mongo Triple Compound Index
链接地址: http://www.djcxy.com/p/9927.html