El análisis de consultas es un aspecto muy importante para medir el rendimiento de la base de datos y el diseño de indexación. Más información sobre los que se utilizan con frecuencia $ explicar y $ pista peticiones.
EN $ explicar El operador proporciona información sobre la solicitud, los Ãndices utilizados en la solicitud y otras estadÃsticas. Esto es muy útil al analizar qué tan bien están optimizados sus Ãndices.
En el capÃtulo anterior, ya creamos un Ãndice para usuarios colección en los campos Suelo y Nombre de usuario usando la siguiente consulta –
>db.users.createIndex({gender:1,user_name:1}) { "numIndexesBefore" : 2, "numIndexesAfter" : 2, "note" : "all indexes already exist", "ok" : 1 }
Ahora usaremos $ explicar en la próxima solicitud –
>db.users.find({gender:"M"},{user_name:1,_id:0}).explain()
La consulta de explicación anterior () devuelve el siguiente resultado analizado:
{ "queryPlanner" : { "plannerVersion" : 1, "namespace" : "mydb.users", "indexFilterSet" : false, "parsedQuery" : { "gender" : { "$eq" : "M" } }, "queryHash" : "B4037D3C", "planCacheKey" : "DEAAE17C", "winningPlan" : { "stage" : "PROJECTION_COVERED", "transformBy" : { "user_name" : 1, "_id" : 0 }, "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "gender" : 1, "user_name" : 1 }, "indexName" : "gender_1_user_name_1", "isMultiKey" : false, "multiKeyPaths" : { "gender" : [ ], "user_name" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "gender" : [ "["M", "M"]" ], "user_name" : [ "[MinKey, MaxKey]" ] } } }, "rejectedPlans" : [ ] }, "serverInfo" : { "host" : "Krishna", "port" : 27017, "version" : "4.2.1", "gitVersion" : "edf6d45851c0b9ee15548f0f847df141764a317e" }, "ok" : 1 }
Ahora, veremos los campos en este conjunto de resultados:
Verdadero valor indexOnly indica que se utilizó la indexación en esta solicitud.
EN cursor el campo especifica el tipo de cursor a utilizar. El tipo BTreeCursor indica que se utilizó el Ãndice y también da el nombre del Ãndice que se utilizará. BasicCursor indica que se realizó un análisis completo sin utilizar Ãndices.
PAG indica el número de documentos coincidentes devueltos.
nscannedObjects indica el número total de documentos escaneados.
nscanned indica el número total de documentos escaneados o entradas de Ãndice.
EN $ pista El operador obliga al optimizador de consultas a utilizar el Ãndice especificado para ejecutar la consulta. Esto es especialmente útil si desea probar el rendimiento de una consulta con diferentes Ãndices. Por ejemplo, la siguiente consulta especifica el Ãndice de los campos Suelo y Nombre de usuario para su uso en esta solicitud:
>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1}) { "user_name" : "tombenzamin" }
Para analizar la solicitud anterior usando $ explicación:
>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1}).explain()
Esto le da el siguiente resultado:
{ "queryPlanner" : { "plannerVersion" : 1, "namespace" : "mydb.users", "indexFilterSet" : false, "parsedQuery" : { "gender" : { "$eq" : "M" } }, "queryHash" : "B4037D3C", "planCacheKey" : "DEAAE17C", "winningPlan" : { "stage" : "PROJECTION_COVERED", "transformBy" : { "user_name" : 1, "_id" : 0 }, "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "gender" : 1, "user_name" : 1 }, "indexName" : "gender_1_user_name_1", "isMultiKey" : false, "multiKeyPaths" : { "gender" : [ ], "user_name" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "gender" : [ "["M", "M"]" ], "user_name" : [ "[MinKey, MaxKey]" ] } } }, "rejectedPlans" : [ ] }, "serverInfo" : { "host" : "Krishna", "port" : 27017, "version" : "4.2.1", 109 "gitVersion" : "edf6d45851c0b9ee15548f0f847df141764a317e" }, "ok" : 1 }
🚫