2012-09-20 19 views
27

ich eine Abfrage gefeuert und versuchte es auf Mongo Konsole zu erklären und bekamVerständnis Mongo db erklären

"isMultiKey" : true, 
"n" : 8, 
"nscannedObjects" : 17272, 
"nscanned" : 17272, 
"nscannedObjectsAllPlans" : 21836, 
"nscannedAllPlans" : 21836, 
"scanAndOrder" : true, 
"indexOnly" : false, 
"nYields" : 0, 
"nChunkSkips" : 0, 
"millis" : 184, 

Die meisten Dinge in http://www.mongodb.org/display/DOCS/Explain erklärt werden, aber ich kann nicht verstehen, was tut nscannedObjectsAllPlans bedeutet nscannedAllPlans. Kann jemand helfen?

Dank

Antwort

23

nscanned und nscannedObjects Bericht Ergebnisse für den Gewinnplan.

nscannedAllPlans und nscannedObjectsAllPlans Bericht Ergebnisse für alle Pläne

Zum Beispiel:

>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, 
... 
} 
+0

Also soll ich mir Sorgen machen, wenn nscannedObjectsAllPlans, nscannedAllPlans großen Wert geben, während die nScanned noch im akzeptablen Bereich liegt? –

+0

Ich glaube nicht - ich glaube es ist nur, wenn explain() aufgerufen wird, dass es diese anderen Pläne überhaupt ausführt. – Konklone

+3

Das Ausführen mehrerer Pläne ist im Grunde, wie MongoDB entscheidet, welchen Abfrageplan es verwenden soll. Es führt alle Pläne aus, die es bei der ersten Ausführung der Abfrage parallel verwenden könnte, dann periodisch nach einer Anzahl von Abfragen oder Änderungen an den Daten. Sobald man fertig ist, speichert es es als den zu verwendenden Plan, bricht die anderen ab und verwendet diesen Plan, bis er das nächste Mal beschließt, es zu aktualisieren. –