【发布时间】:2017-11-11 19:17:45
【问题描述】:
我听到并阅读了很多关于它们的相互矛盾的信息,我想澄清一下,因为我似乎无法通过 Google 查询来获得我正在寻找的答案:
- 必须使用索引中的所有字段才能正确利用索引吗?
- 如果查询中的字段未包含在索引中,Mongo 是否能够利用该索引?
【问题讨论】:
-
1) 否,2) 是
标签: mongodb optimization indexing
我听到并阅读了很多关于它们的相互矛盾的信息,我想澄清一下,因为我似乎无法通过 Google 查询来获得我正在寻找的答案:
【问题讨论】:
标签: mongodb optimization indexing
稍微扩展一下 Sergio 的 cmets:
必须使用索引中的所有字段才能正确利用索引吗?
没有。对于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 } 通常会更有效。
【讨论】: