了解mongo db解释

Glo*_*ior 27 mongodb nosql mongodb-query

我发了一个查询并尝试在mongo控制台上解释它并得到了

"isMultiKey" : true,
"n" : 8,
"nscannedObjects" : 17272,
"nscanned" : 17272,
"nscannedObjectsAllPlans" : 21836,
"nscannedAllPlans" : 21836,
"scanAndOrder" : true,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 184,
Run Code Online (Sandbox Code Playgroud)

大多数事情都在http://www.mongodb.org/display/DOCS/Explain中解释,但我无法理解nscannedObjectsAllPlans,nscannedAllPlans的含义.有人可以帮忙吗?

谢谢

Gia*_* P. 23

nscannednscannedObjects报告获胜计划的结果.

nscannedAllPlansnscannedObjectsAllPlans报告所有计划的结果

例如:

>t = db.jstests_explainb;
>t.drop();

>t.ensureIndex( { a:1, b:1 } );
>t.ensureIndex( { b:1, a:1 } );

>t.save( { a:0, b:1 } );
>t.save( { a:1, b:0 } );

>t.find( { a:{ $gte:0 }, b:{ $gte:0 } } ).explain( true );
{
  "cursor": "BtreeCursor a_1_b_1",
  "isMultiKey": false,
  "n": 2,
  "nscannedObjects": 2,
  "nscanned": 2,
  "nscannedObjectsAllPlans": 6,
  "nscannedAllPlans": 6,
  "scanAndOrder": false,
  "indexOnly": false,
  "nYields": 0,
  "nChunkSkips": 0,
  "millis": 2,
...
}
Run Code Online (Sandbox Code Playgroud)

  • 运行多个计划基本上是MongoDB如何决定它应该使用哪个查询计划.它会在第一次运行查询时执行它可以并行使用的所有计划,然后在对数据进行多次查询或更改后定期执行.一旦完成,它会将其作为计划使用,取消其他计划,并将使用该计划,直到下一次决定刷新它. (3认同)