MongoDB 查找和排序的索引使用

MongoDB index usage for find and sort

我有一个查询,其中 find() 使用与排序不同的文档属性。

例如

document = { a : "", b : "", c : "", d : "", e : ""}

db.col.find({a : "", b : "", c : ""}).sort({d:1, e:1})

我可以创建两个索引,一个用于 find(),一个用于 sort(),MongoDB 会相应地使用它们吗?

db.col.createIndex({a : 1, b : 1, c : 1})
db.col.createIndex({d:1, e:1})

是 mongodb 将同时使用这两个索引用于不同的目的。添加索引的规则之一如下

索引中字段的顺序应该是:

首先,您将在其上查询精确值的字段。 其次,您要排序的字段。 最后,您将查询一系列值的字段。

sort() 操作需要一个完全独立于查询谓词的索引时,

MongoDB(在 3.0 中)不能使用多个索引(又名 "index intersection")。您可以使用 MongoDB 的 explain functionality:

确认正在考虑哪些索引(以及获胜计划)
db.col.find({a : "", b : "", c : ""}).sort({d:1, e:1}).explain(true)

对于您的示例,这意味着理想的复合索引可能是 {a:1, b:1, c:1, d:1, e:1} 上的单个索引。

有关详细信息,请参阅: