Analyse des requêtes MongoDB
L'analyse des requêtes MongoDB peut garantir si l'index proposé est efficace et constitue un outil important pour l'analyse des performances des instructions de requête.
Les fonctions couramment utilisées pour l'analyse des requêtes MongoDB sont : expliquer() et soupçon().
Utiliser expliquer()
L'opération expliquer fournit des informations sur la requête, un index d'utilisation et des statistiques de requête, etc. Il nous est utile d’optimiser l’index.
Ensuite, nous créons des index pour le sexe et le nom d'utilisateur dans la collection des utilisateurs :
>db.users.ensureIndex({gender:1,user_name:1}) </p> <p>现在在查询语句中使用 explain :</p> <pre> >db.users.find({gender:"M"},{user_name:1,_id:0}).explain()
La requête expliquer() ci-dessus renvoie les résultats suivants :
{ "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 } ] ] } }
Maintenant, jetons un coup d'œil à ce Champs de l'ensemble de résultats :
indexOnly : Le champ est vrai, indiquant que nous utilisons l'index.
curseur : Parce que cette requête utilise un index et que l'index dans MongoDB est stocké dans une structure B-tree, cela utilise donc également un curseur de type BtreeCursor . Si aucun index n'est utilisé, le type de curseur est BasicCursor. Cette clé vous donnera également le nom de l'index que vous utilisez. Grâce à ce nom, vous pourrez visualiser la collection system.indexes sous la base de données actuelle (le système la crée automatiquement, car il stocke les informations de l'index, cela sera mentionné plus tard). pour obtenir les informations détaillées de l'index.
n : Le nombre de documents renvoyés par la requête en cours.
nscanned/nscannedObjects : Indique combien de documents de la collection ont été numérisés par la requête actuelle. Notre objectif est de rendre cette valeur plus cohérente avec le nombre de. documents retournés. Plus c'est proche, mieux c'est.
millis : Le temps requis pour la requête en cours, en millisecondes.
indexBounds : L'index spécifiquement utilisé par la requête actuelle.
Utilisation de soupçon()
Bien que l'optimiseur de requêtes MongoDB fonctionne généralement bien, vous pouvez également utiliser des conseils pour forcer MongoDB à utiliser un index spécifique.
Cette méthode améliorera les performances dans certains cas. Prenez une collection indexée et effectuez une requête multi-champs (certains champs sont déjà indexés).
L'exemple de requête suivant spécifie l'utilisation des champs d'index de genre et de nom d'utilisateur pour interroger :
>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1})
Vous pouvez utiliser la fonction expliquer() pour analyser la requête ci-dessus :
>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1}).explain()