【问题标题】:Compound Indexes Order in MongoMongo中的复合索引顺序
【发布时间】:2013-09-27 11:46:36
【问题描述】:

假设我有以下文档架构:

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

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

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

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

【问题讨论】:

标签: mongodb indexing


【解决方案1】:

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

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

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

【讨论】:

  • 信息量很大。为什么说the order **should** not matter
  • @Kevin 因为重新排列查找参数的顺序是一项优化任务,所以数据库应该能够自己完成。
猜你喜欢
  • 1970-01-01
  • 2015-04-17
  • 2017-03-12
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多