2012-09-20 23 views
27

odpaliłem zapytanie i starał się wyjaśnić na konsoli Mongo i dostałZrozumienie Mongo db wyjaśnić

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

Większość rzeczy są wyjaśnione w http://www.mongodb.org/display/DOCS/Explain, ale nie mogę zrozumieć, co robi nscannedObjectsAllPlans, nscannedAllPlans znaczy. Czy ktoś może pomóc?

Dzięki

Odpowiedz

23

nscanned i nscannedObjects Wyniki raportu dla zwycięskiej planu.

nscannedAllPlans i nscannedObjectsAllPlans raport wyniki dla wszystkich planów

na przykład:

>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

Więc należy się martwić, jeśli nscannedObjectsAllPlans, nscannedAllPlans dają dużą wartość, gdy nscanned jest nadal w dopuszczalnym zakresie? –

+0

Nie sądzę - wierzę, że tylko wtedy, gdy wyjaśnia się(), że wykonuje te inne plany w pierwszej kolejności. – Konklone

+3

Prowadzenie wielu planów to w zasadzie sposób, w jaki MongoDB decyduje, którego planu kwerendy powinien użyć. Wykonuje wszystkie plany, z których może korzystać równolegle przy pierwszym uruchomieniu zapytania, a następnie okresowo po wielu zapytaniach lub zmianach danych. Jak tylko się ukończy, zapisuje go jako plan użycia, anuluje pozostałe i używa tego planu do następnego razu, gdy zdecyduje się go odświeżyć. –