Análisis de consultas MongoDB
El análisis de consultas en MongoDB permite verificar si los índices creados son efectivos, y es una herramienta importante para el análisis de rendimiento de las consultas.
Las funciones comunes del análisis de consultas en MongoDB son: explain() y hint().
Usar explain()
La operación explain proporciona información de la consulta, uso de índices y estadísticas de consulta, etc. Es útil para la optimización de índices.
A continuación, creamos índices en los campos gender y user_name en la colección users:
>db.users.ensureIndex({gender:1,user_name:1})
Ahora usamos explain en la consulta:
>db.users.find({gender:"M"},{user_name:1,_id:0}).explain()
La consulta explain() anterior devuelve el siguiente resultado:
{
"cursor" : "BtreeCursor gender_1_user_name_1",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 0,
"nscanned" : 1,
"nscannedObjectsAllPlans" : 0,
"nscannedAllPlans" : 1,
"scanAndOrder" : false,
"indexOnly" : true,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"gender" : [
[
"M",
"M"
]
],
"user_name" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
]
}
}
Ahora, veamos los campos de este conjunto de resultados:
- indexOnly: El campo es true, lo que indica que utilizamos un índice.
- cursor: Debido a que esta consulta utiliza un índice, y en MongoDB los índices se almacenan en una estructura de árbol B, por lo que también se utiliza un cursor de tipo BtreeCursor. Si no se utiliza un índice, el tipo de cursor es BasicCursor. Esta clave también proporciona el nombre del índice que utilizó. Con este nombre puede ver la colección system.indexes en la base de datos actual (creada automáticamente por el sistema, ya que almacena información del índice; esto se mencionará más adelante) para obtener información detallada del índice.
- n: El número de documentos devueltos por la consulta actual.
- nscanned/nscannedObjects: Indica cuántos documentos de la colección se escanearon en total durante esta consulta. Nuestro objetivo es que este valor se acerque lo más posible al número de documentos devueltos.
- millis: El tiempo requerido por la consulta actual, en milisegundos.
- indexBounds: El índice específico utilizado por la consulta actual.
Usar hint()
Aunque el optimizador de consultas de MongoDB generalmente funciona muy bien, también se puede usar hint para forzar a MongoDB a utilizar un índice específico.
Este método puede mejorar el rendimiento en ciertas situaciones. Por ejemplo, una colección indexada y la ejecución de una consulta con múltiples campos (algunos ya indexados).
El siguiente ejemplo de consulta especifica el uso de los campos de índice gender y user_name para realizar la consulta:
>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1})
Puede usar la función explain() para analizar la consulta anterior:
>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1}).explain()
Otras extensiones