2012-09-20 18 views
27

Disparé una consulta y trató de explicarlo en la consola mongo y tieneentendimiento MongoDB explicar

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

La mayoría de las cosas se explican en http://www.mongodb.org/display/DOCS/Explain, pero no puedo entender lo que hace nscannedObjectsAllPlans, nscannedAllPlans significa. ¿Alguien puede ayudar?

Gracias

Respuesta

23

nscanned y nscannedObjects resultados del informe para el plan ganador.

nscannedAllPlans y nscannedObjectsAllPlans informe de resultados para todos los planes

Por ejemplo:

>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

Así debería preocuparme si nscannedObjectsAllPlans, nscannedAllPlans están dando valor grande, mientras que el nscanned todavía está en el rango aceptable? –

+0

No lo creo, creo que es solo cuando se llama a Explain() que realiza esos otros planes en primer lugar. – Konklone

+3

La ejecución de varios planes es básicamente cómo MongoDB decide qué plan de consulta debe usar. Ejecuta todos los planes que podría usar en paralelo la primera vez que se ejecuta la consulta, y luego periódicamente después de una serie de consultas o cambios en los datos. Tan pronto como uno termina, lo almacena en la memoria caché como el plan a usar, cancela los demás y usará ese plan hasta la próxima vez que decida actualizarlo. –