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}
上的单个索引。
有关详细信息,请参阅:
- Index Intersection & Sort 在 MongoDB 文档中
- Optimizing MongoDB Compound Indexes - 博客 post 早于索引交集,但仍然适用于您描述的查询和排序。
我有一个查询,其中 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}
上的单个索引。
有关详细信息,请参阅:
- Index Intersection & Sort 在 MongoDB 文档中
- Optimizing MongoDB Compound Indexes - 博客 post 早于索引交集,但仍然适用于您描述的查询和排序。