摘要: 对于MongoDB的多键查询,创建复合索引可以有效提高性能。
db.students.find().pretty()
{
"_id" : ObjectId("5aa7390ca5be7272a99b042a"),
"name" : "zhang",
"age" : "15"
}
{
"_id" : ObjectId("5aa7393ba5be7272a99b042b"),
"name" : "wang",
"age" : "15"
}
{
"_id" : ObjectId("5aa7393ba5be7272a99b042c"),
"name" : "zhang",
"age" : "14"
}
在name和age两个键分别创建了索引(_id自带索引):
db.students.getIndexes()
[
{
"v" : 1,
"key" : {
"name" : 1
},
"name" : "name_1",
"ns" : "test.students"
},
{
"v" : 1,
"key" : {
"age" : 1
},
"name" : "age_1",
"ns" : "test.students"
}
]
当进行多键查询时,可以通过[explian()](https://docs.mongodb.com/manual/reference/method/cursor.explain/)分析执行情况(结果仅保留winningPlan):
db.students.find({name:"zhang",age:"14"}).explain()
"winningPlan":
{
"stage": "FETCH",
"filter":
{
"name":
{
"$eq": "zhang"
}
},
"inputStage":
{
"stage": "IXSCAN",
"keyPattern":
{
"age": 1
},
"indexName": "age_1",
"isMultiKey": false,
"isUnique": false,
"isSparse": false,
"isPartial": false,
"indexVersion": 1,
"direction": "forward",
"indexBounds":
{
"age": [