MongoDB指数如何运作?

时间:2017-06-09 17:14:39

标签: mongodb optimization indexing

我已经听过并阅读了很多有关它们的相互矛盾的信息,我想澄清一下,因为我似乎无法调整我的Google查询以获得我正在寻找的答案:

  • 必须使用索引中的所有字段才能正确使用索引吗?
  • 如果查询中的字段未包含在该索引中,Mongo是否能够利用索引?

1 个答案:

答案 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 }通常会更有效。