Mongo中的复合索引顺序

时间:2013-09-27 11:46:37

标签: mongodb indexing

假设我有以下文档架构:

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

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

当然,复合索引订单对涉及范围查询的问题很重要。

如果仅使用完全查询(例如:name ==“Kevin”,weight == 100,hobby ==“C ++”),那么顺序对复合索引是否真正重要?

1 个答案:

答案 0 :(得分:1)

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

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

  • indexOnly :当它成立时,查询完全被索引覆盖
  • n nScanned :第一个告诉您已找到文件的数量,第二个需要检查多少文件,因为索引无法对其进行排序。后者不应该明显高于第一个。
  • millis :查询执行的毫秒数