我在MongoDB中使用索引。我有一个查询:
db.collection.find({field1:"val1",field2:"val2",field3:"val3"})
其中' field1'和' field2'是复合索引的一部分 但是' field3'不属于任何索引 。 我的问题是,将对整个集合执行集合扫描,以匹配' field3'或者' field1'中是否存在索引和' field2'限制要扫描的文档数量为' field3'?
的值提前感谢您的时间。
答案 0 :(得分:1)
是的,将使用索引
我通过创建包含文档的集合来测试它:
{ "a" : 1, "b" : 1, "c" : 1 }
{ "a" : 2, "b" : 2, "c" : 2 }
{ "a" : 3, "b" : 3, "c" : 3 }
添加索引:
db.indexTest.createIndex({"a":1,"b":1})
查询字段" c"单独返回一个解释:
"winningPlan" : {
"stage" : "COLLSCAN",
"filter" : {
"c" : {
"$eq" : 3
}
},
"direction" : "forward"
},
查询" a"," b"和" c"使用索引返回解释:
"winningPlan" : {
"stage" : "FETCH",
"filter" : {
"c" : {
"$eq" : 3
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"a" : 1,
"b" : 1
},
"indexName" : "a_1_b_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"a" : [ ],
"b" : [ ]
},