MongoDB是否使用包含查询中搜索的字段子集的索引?

时间:2016-02-13 16:46:12

标签: mongodb indexing

例如,假设我们想查找带有查询的文档:

{
  name: "somename",
  age: someage,
  city: "somecity",
  country: "somecountry"
}

我们有两个索引:

{
  name: 1,
  age: -1
}
{
  name: 1,
  city: 1,
  country: 1
}

MongoDB会使用这些索引之一来提高find()效率吗?

1 个答案:

答案 0 :(得分:1)

是。

MongoDB将在您第一次运行查询时使用这两个索引,或者在query plan revision中指定时决定这样做。然后,它将缓存并重新使用对该查询形状(包含上述四个字段的查询)最有效的查询计划。

这基本上意味着它将使用查询优化器发现的最有效的两个索引之一。

您还可以通过以下方式指示MongoDB使用其中一个索引:

  1. 指定hint
  2. 指定index filter(会导致提示被忽略)
  3. 有关更多信息,请参阅MongoDB手册中的Query Plans

    为了查看您的查询使用了哪个索引(及其原因),您可以运行explain