我有2个查询:
// query 1
{
"site.$id": ObjectId("52d617b5d8c472274f00004f")
}
// query 2
{
"site.$id": ObjectId("52d617b5d8c472274f00004f"),
"category.$id": ObjectId("52d617c0d8c472274f000076")
}
有人可以解释为什么第二个查询占用1而第一个查询非常快?
此系列有大约300,000个条目 以下是查询1的解释
db.Product.find({ "site.$id": ObjectId("52d617b5d8c472274f00004f") }).explain()
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 21,
"nscannedObjects" : 279001,
"nscanned" : 279001,
"nscannedObjectsAllPlans" : 279001,
"nscannedAllPlans" : 279001,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 3,
"nChunkSkips" : 0,
"millis" : 545,
"indexBounds" : {
},
"server" : "ip-172-31-9-78:27017"
}
以下是查询2的解释
db.Product.find({ "site.$id": ObjectId("52d617b5d8c472274f00004f"), "category.$id": ObjectId("52d617c0d8c472274f000076") }).explain()
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 279002,
"nscanned" : 279002,
"nscannedObjectsAllPlans" : 279002,
"nscannedAllPlans" : 279002,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 107,
"nChunkSkips" : 0,
"millis" : 1852,
"indexBounds" : {
},
"server" : "ip-172-31-9-78:27017"
}
答案 0 :(得分:0)
尝试为这些字段创建索引。我认为它会更快地运作..
db.Product.ensureIndex( { "site.$id": 1, "category.$id": 1 } )
您还可以考虑查询中的字段顺序以及索引中的字段顺序。这将有助于http://docs.mongodb.org/manual/tutorial/create-queries-that-ensure-selectivity/