MongoDB Abfrageanalyse
Die MongoDB-Abfrageanalyse kann feststellen, ob die von uns erstellten Indizes effektiv sind, und ist ein wichtiges Werkzeug für die Leistungsanalyse von Abfrageanweisungen.
Zu den häufig verwendeten Funktionen in der MongoDB-Abfrageanalyse gehören: explain() und hint().
Verwendung von explain()
Die explain-Operation liefert Abfrageinformationen, Indexnutzung und Abfragestatistiken usw. Sie hilft uns, Indizes zu optimieren.
Als Nächstes erstellen wir Indizes für gender und user_name in der users-Collection:
>db.users.ensureIndex({gender:1,user_name:1})
Nun verwenden wir explain in der Abfrageanweisung:
>db.users.find({gender:"M"},{user_name:1,_id:0}).explain()
Die obige explain()-Abfrage gibt die folgenden Ergebnisse zurück:
{
"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
}
]
]
}
}
Schauen wir uns nun die Felder dieser Ergebnismenge an:
- indexOnly: Das Feld ist true und zeigt an, dass wir einen Index verwendet haben.
- cursor: Da diese Abfrage einen Index verwendet und Indizes in MongoDB in einer B-tree-Struktur gespeichert werden, verwendet sie auch einen Cursor vom Typ BtreeCursor. Wird kein Index verwendet, ist der Cursor-Typ BasicCursor. Dieser Schlüssel gibt außerdem den Namen des Index an, den Sie verwenden. Über diesen Namen können Sie die system.indexes-Collection in der aktuellen Datenbank ansehen (vom System automatisch erstellt, um Indexinformationen zu speichern, worauf später kurz eingegangen wird), um detaillierte Informationen über den Index zu erhalten.
- n: Die Anzahl der von der aktuellen Abfrage zurückgegebenen Dokumente.
- nscanned/nscannedObjects: Gibt an, wie viele Dokumente in der Collection während dieser Abfrage insgesamt gescannt wurden. Unser Ziel ist es, diesen Wert so nah wie möglich an die Anzahl der zurückgegebenen Dokumente heranzubringen.
- millis: Die für die aktuelle Abfrage benötigte Zeit in Millisekunden.
- indexBounds: Der spezifische Index, der von der aktuellen Abfrage verwendet wird.
Verwendung von hint()
Obwohl der MongoDB-Abfrageoptimierer im Allgemeinen recht gut funktioniert, können Sie auch hint verwenden, um MongoDB zu zwingen, einen angegebenen Index zu verwenden.
Diese Methode kann die Leistung in bestimmten Situationen verbessern. Zum Beispiel bei einer indizierten Sammlung und wenn eine Abfrage über mehrere Felder ausgeführt wird (wobei einige Felder bereits indiziert sind).
Das folgende Abfragebeispiel gibt an, die Indexfelder gender und user_name für die Abfrage zu verwenden:
>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1})
Sie können die Funktion explain() verwenden, um die obige Abfrage zu analysieren:
>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1}).explain()
Andere Erweiterungen