nscannedObjectsAllPlans

nscannedObjectsAllPlans

我试图检查一个查询,但我不确定“nscanndobjectsallplans”和“nscanndallplans”在做什么,因为我看到如果我直接从索引字段“purchasestate”运行一个查询
我得到相同的结果扫描项目
“nscannedobjects”、“nscanned”、“nscannedobjectsallplans”和“nscannedallplans”
但是,一旦我在查询中添加了大于400的价格,
nscanndobjectsallplans现在大于nscanndobjects
我想知道nscannedobjectsallplans是否是运行带有购买状态索引和购买状态id索引的计划的扫描对象总数?
或者只是说明两个指数计划结果中较大的一个??
我给普鲁查斯州增加了一个索引
然后我添加了一个关于购买状态和id的索引
db.toys.ensureIndex({“purchaseState”:1})
db.toys.ensureIndex({“purchaseState”:1,“\u id”:1})

            **db.toys.find({"purchaseState" : "NY"}).pretty().explain()**

               "cursor" : "BtreeCursor purchaseState_1",
               "isMultiKey" : false,
               "n" : 1596,
               "nscannedObjects" : 1596,
               "nscanned" : 1596,
               "nscannedObjectsAllPlans" : 1596,
               "nscannedAllPlans" : 1596,
               "scanAndOrder" : false,
               "indexOnly" : false,
               "nYields" : 0,
               "nChunkSkips" : 0,
               "millis" : 3,
               "indexBounds" : {
                       "purchaseState" : [
                               [
                                       "NY",
                                       "NY"
                               ]
                       ]
               },
               "server" : "XXXXXXX:27017"

            **db.toys.find({"purchaseState" : "NY", "price": { $gt : 400 }}).pretty().explain()**

               "cursor" : "BtreeCursor purchaseState_1",
               "isMultiKey" : false,
               "n" : 1423,
               "nscannedObjects" : 1596,
               "nscanned" : 1596,
               "nscannedObjectsAllPlans" : 1808,
               "nscannedAllPlans" : 1808,
               "scanAndOrder" : false,
               "indexOnly" : false,
               "nYields" : 0,
               "nChunkSkips" : 0,
               "millis" : 10,
               "indexBounds" : {
                       "purchaseState" : [
                               [
                                       "NY",
                                       "NY"
                               ]
                       ]
               },
               "server" : "XXXXXXX:27017"

最佳答案

MongoDB并行运行不同的可用计划,并选择其中最好的一个,并记住这类数据集的计划。它还自动地对该集合上的每1000个写操作执行一次计划值,以确保它们对进一步类似的查询执行有正确的计划。
nscannedobjectsallplans意味着,当您运行一个查询时,让我们说,它们与两个不同的计划一起运行,它会显示该计数。
对于nscanndobjectsallplans/nscanndallplans没有明确的文档。我已经经历了MongoDB course的过程,这里也没有解释,但是它选择最佳计划的方式,间接地给出了nscannelplan的答案。
希望这有帮助!

07-26 02:34