0

假设我有以下文档架构:

{
  _id: ObjectId(...),
  name: "Kevin",
  weight: 500,
  hobby: "scala",
  favoriteFood : "chicken",
  pet: "parrot",
  favoriteMovie : "Diehard"
}

如果我在 上创建复合索引name-weight,我将能够指定一个严格的参数(名称 ==“Kevin”)和一个range权重(介于 50 和 200 之间)。但是,我不能反过来:指定一个权重并给出一个“范围”的名称。

当然,在涉及范围查询的情况下,复合索引顺序很重要。

如果只使用精确查询(例如:name == "Kevin"、weight == 100、hobby == "C++"),那么顺序对于复合索引真的很重要吗?

4

1 回答 1

1

当您有确切的查询时,顺序应该无关紧要。但是当您想确定时,.explain()数据库游标上的方法是您的朋友。它可以告诉您在 mongo shell 中执行查询时使用了哪些索引以及如何使用它们。

explain返回的文档的重要字段是:

  • indexOnly:当它为真时,查询完全被索引覆盖
  • nnScanned:第一个告诉您找到的文档的数量,第二个告诉您必须检查多少个文档,因为索引无法对它们进行排序。后者不应明显高于第一个。
  • millis : 查询执行所需的毫秒数
于 2013-09-27T13:47:03.977 回答