Indizes sind in jeder Datenbank sehr wichtig, und bei MongoDB ist das nicht anders. Durch die Verwendung von Indizes wird die Durchführung von Abfragen in MongoDB effizienter.
Wenn Sie eine Sammlung mit Tausenden von Dokumenten ohne Indizes haben und dann eine Abfrage machen, um bestimmte Dokumente zu finden, dann müsste MongoDB in diesem Fall die gesamte Sammlung durchsuchen, um die Dokumente zu finden. Hätten Sie jedoch Indizes, würde MongoDB diese Indizes verwenden, um die Anzahl der Dokumente zu begrenzen, die in der Sammlung gesucht werden müssen.
Indizes sind spezielle Datensätze, die einen Teil der Daten in der Sammlung speichern. Da es sich um einen Teil der Daten handelt, ist es einfacher, diese Daten zu lesen. Diese Teilmenge speichert den Wert eines bestimmten Feldes oder einer Menge von Feldern, geordnet nach dem Wert des Feldes.
In diesem Tutorial werden Sie lernen –
- Die Auswirkungen von Indizes zu verstehen
- Wie man Indizes erstellt: createIndex()
- Wie man Indizes findet: getindexes()
- Wie man Indizes löscht: dropindex()
Auswirkungen von Indizes verstehen
Nun haben wir zwar in der Einführung gesehen, dass Indizes gut für Abfragen sind, aber zu viele Indizes können andere Operationen wie die Einfüge-, Lösch- und Aktualisierungsoperation verlangsamen.
Wenn häufig Einfüge-, Lösch- und Aktualisierungsoperationen an Dokumenten durchgeführt werden, dann müssten die Indizes so oft geändert werden, was nur einen Overhead für die Sammlung bedeuten würde.
Das folgende Beispiel zeigt, welche Feldwerte einen Index in einer Sammlung bilden können. Ein Index kann entweder auf nur einem Feld in der Sammlung basieren oder auf mehreren Feldern in der Sammlung.
Im folgenden Beispiel werden die Employeeid „1“ und der EmployeeCode „AA“ zur Indizierung der Dokumente in der Sammlung verwendet. Bei einer Abfragesuche werden diese Indizes verwendet, um schnell und effizient die gewünschten Dokumente in der Sammlung zu finden.
Auch wenn die Suchabfrage auf dem EmployeeCode „AA“ basiert, würde dieses Dokument zurückgegeben werden.
Wie man Indizes erstellt: createIndex()
Das Erstellen eines Index in MongoDB erfolgt mit der Methode „createIndex“.
Das folgende Beispiel zeigt, wie ein Index zu einer Sammlung hinzugefügt wird. Nehmen wir an, dass wir dieselbe Employee-Sammlung haben, die die Feldnamen „Employeeid“ und „EmployeeName“ hat.
db.Employee.createIndex({Employeeid:1})
Code-Erläuterung:
- Die createIndex-Methode wird verwendet, um einen Index basierend auf der „Employeeid“ des Dokuments zu erstellen.
- Der Parameter ‚1‘ gibt an, dass der Index mit den Werten des „Employeeid“-Feldes in aufsteigender Reihenfolge sortiert werden soll, wenn er erstellt wird. Bitte beachten Sie, dass dies ein Unterschied zum _id-Feld ist (das id-Feld wird zur eindeutigen Identifizierung jedes Dokuments in der Sammlung verwendet), das von MongoDB automatisch in der Sammlung erstellt wird. Die Dokumente werden nun nach der Employeeid und nicht nach dem _id-Feld sortiert.
Wenn der Befehl erfolgreich ausgeführt wird, wird die folgende Ausgabe angezeigt:
Ausgabe:
- Die Zahl numIndexesBefore: 1 gibt die Anzahl der Feldwerte (die tatsächlichen Felder in der Sammlung) an, die in den Indizes vorhanden waren, bevor der Befehl ausgeführt wurde. Denken Sie daran, dass jede Sammlung das Feld _id hat, das ebenfalls als Feldwert für den Index zählt. Da das Indexfeld _id Teil der Sammlung ist, wenn sie ursprünglich erstellt wird, ist der Wert von numIndexesBefore 1.
- Die numIndexesAfter: 2 gibt die Anzahl der Feldwerte an, die nach der Ausführung des Befehls in den Indizes vorhanden waren.
- Hier gibt die „ok: 1“ aus, dass der Vorgang erfolgreich war und der neue Index der Sammlung hinzugefügt wurde.
Der obige Code zeigt, wie man einen Index basierend auf einem Feldwert erstellt, aber man kann auch einen Index basierend auf mehreren Feldwerten erstellen.
Das folgende Beispiel zeigt, wie das gemacht werden kann;
db.Employee.createIndex({Employeeid:1, EmployeeName:1])
Code-Erklärung:
- Die createIndex-Methode berücksichtigt nun mehrere Feldwerte, was dazu führt, dass der Index auf Basis von „Employeeid“ und „EmployeeName“ erstellt wird. Employeeid:1 und EmployeeName:1 bedeutet, dass der Index auf diesen beiden Feldwerten erstellt werden soll, wobei die :1 angibt, dass er in aufsteigender Reihenfolge erstellt werden soll.
Wie man Indizes findet: getindexes()
Die Suche nach einem Index in MongoDB erfolgt mit der Methode „getIndexes“.
Das folgende Beispiel zeigt, wie das gemacht werden kann;
db.Employee.getIndexes()
Code-Erläuterung:
- Die Methode getIndexes wird verwendet, um alle Indizes in einer Auflistung zu finden.
Wenn der Befehl erfolgreich ausgeführt wird, wird die folgende Ausgabe angezeigt:
Ausgabe:
- Die Ausgabe liefert ein Dokument, das lediglich zeigt, dass es 2 Indizes in der Auflistung gibt, wobei der eine das Feld _id und der andere das Feld Employee id ist. Die :1 zeigt an, dass die Feldwerte im Index in aufsteigender Reihenfolge erstellt werden.
Wie man Indizes löscht: dropindex()
Das Entfernen eines Indexes in MongoDB erfolgt mit der Methode dropIndex.
Das folgende Beispiel zeigt, wie dies geschehen kann;
db.Employee.dropIndex(Employeeid:1)
Code-Erläuterung:
- Die dropIndex-Methode nimmt die erforderlichen Feldwerte, die aus dem Index entfernt werden müssen.
Wenn der Befehl erfolgreich ausgeführt wird, wird die folgende Ausgabe angezeigt:
Ausgabe:
- Die nIndexesWas: 3 gibt die Anzahl der Feldwerte an, die sich vor der Ausführung des Befehls in den Indizes befanden. Denken Sie daran, dass jede Sammlung das Feld _id hat, das ebenfalls als Feldwert für den Index zählt.
- Die Ausgabe ok: 1 gibt an, dass der Vorgang erfolgreich war und das Feld „Employeeid“ aus dem Index entfernt wurde.
Um alle Indizes in der Auflistung auf einmal zu entfernen, kann man den Befehl dropIndexes verwenden.
Das folgende Beispiel zeigt, wie man dies tun kann.
db.Employee.dropIndex()
Code-Erläuterung:
- Die dropIndexes-Methode wird alle Indizes außer dem _id-Index löschen.
Wenn der Befehl erfolgreich ausgeführt wird, wird die folgende Ausgabe angezeigt:
Ausgabe:
- Das nIndexesWas: 2 gibt die Anzahl der Feldwerte an, die sich vor der Ausführung des Befehls in den Indizes befanden.
- Erinnern Sie sich noch einmal daran, dass jede Auflistung das Feld _id hat, das auch als Feldwert für den Index zählt, und das von MongoDB nicht entfernt wird, und das ist es, was diese Meldung anzeigt.
- Die ok: 1 gibt an, dass der Vorgang erfolgreich war.
Zusammenfassung
- Die Definition von Indizes ist wichtig für eine schnellere und effizientere Suche von Dokumenten in einer Sammlung.
- Indizes können mit der Methode createIndex erstellt werden. Indizes können für nur ein Feld oder mehrere Feldwerte erstellt werden.
- Indizes können mit der getIndexes-Methode gefunden werden.
- Indizes können mit der dropIndex-Methode für einzelne Indizes oder mit der dropIndexes-Methode zum Löschen aller Indizes entfernt werden.