Performance 为什么mongodb查询,2个条件比1个条件慢?

Performance 为什么mongodb查询,2个条件比1个条件慢?,performance,mongodb,Performance,Mongodb,我有两个问题: // query 1 { "site.$id": ObjectId("52d617b5d8c472274f00004f") } // query 2 { "site.$id": ObjectId("52d617b5d8c472274f00004f"), "category.$id": ObjectId("52d617c0d8c472274f000076") } 有人能解释一下为什么第二个查询需要1s,而第一个查询非常快吗 这个收藏大约有30万个条目 下面是查询1的解释 db.

我有两个问题:

// query 1
{
"site.$id": ObjectId("52d617b5d8c472274f00004f")
}
// query 2
{
"site.$id": ObjectId("52d617b5d8c472274f00004f"),
"category.$id": ObjectId("52d617c0d8c472274f000076") 
}
有人能解释一下为什么第二个查询需要1s,而第一个查询非常快吗

这个收藏大约有30万个条目 下面是查询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"
}

尝试为该字段创建索引。我想它会快得多

db.Product.ensureIndex( { "site.$id": 1, "category.$id": 1 } )

您还可以考虑查询中字段的顺序以及索引中字段的顺序。这将有助于

您能为每个查询显示一个解释吗?