我已经听过并阅读了很多有关它们的相互矛盾的信息,我想澄清一下,因为我似乎无法调整我的Google查询以获得我正在寻找的答案:
答案 0 :(得分:2)
稍微谈谈塞尔吉奥的评论:
必须使用索引中的所有字段才能正确使用索引吗?
没有。对于compound index,MongoDB可以使用索引来支持对索引前缀的查询。
例如,假设有一个索引{ "a" : 1, "b" : 1 }
。查询db.coll.find( { "a" : "something" } )
可以使用此索引,因为a
是前缀,但如果在b
上进行过滤,则查询将无法使用该索引。
如果查询中的字段未包含在该索引中,Mongo是否能够利用索引?
是。通常最好是查询中的所有字段都被编入索引,但查询仍然可以使用仅匹配字段子集的索引。
例如,假设查询为db.coll.find({ "a" : "foo", "b" : "bar" } )
。此查询可以使用索引{ "a" : 1 }
或{ "b" : 1 }
,但{ "a" : 1, "b" : 1 }
或{ "b" : 1, "a" : 1 }
通常会更有效。