TLDR: Indizierung ist nur eine Möglichkeit, Dokumente zu gruppieren, Sammlungen in Gruppen aufzuteilen, um die Leistung zu beschleunigen
Übersicht
Indizes erhöhen die Abfrageleistung und werden auch für die Suche verwendet
Die Idee der Indizierung in MongoDB ist ähnlich wie der Index eines Buches, sie erhöhen die Geschwindigkeit beim Auffinden einer Seite. Der Index in MongoDB erhöht die Geschwindigkeit beim Auffinden von Dokumenten
Wie funktionieren Indizes?
Zunächst wollen wir verstehen, wie man einen Index in MongoDB deklariert
collectionName.createIndex({field:value}) //for creating indexcollectionName.dropIndex({field:value}) //for removing index
Hier ist das Feld „fieldName“, das indiziert werden soll. „Value“ kann -1 oder 1 oder „text“ sein.
Es definiert den Typ des Indexes, 1 oder -1 erhöht die find()-Abfrageleistung, während „text“ für die Suche verwendet wird.
1 und -1 geben die Reihenfolge des Indexes an. Aufsteigend = -1 & Absteigend =1
Nun, wie funktionieren Indizes unter der Haube?
Stellen Sie sich eine Sammlung von Benutzern vor, jedes Dokument enthält verschiedene Informationen, eine davon ist die Punktzahl.
Sagen wir, wir wollen, dass alle Benutzer die Punktzahl 23 haben.
Wenn kein Index vorhanden ist, geht MongoDB durch jedes Dokument, um das abgefragte Dokument zu finden. Dies wird als Collection Scan bezeichnet, MongoDB hat eine Abkürzung für diesen COLLSCAN (Dies wird als Table Scan in relationalen Datenbanken bezeichnet)
Wie können wir dies optimieren?
Um dies zu optimieren, können wir eine Tabelle mit einer Spalte für die Punktzahl und einer weiteren Spalte für Referenzen erstellen, die IDs von Dokumenten mit dieser bestimmten Punktzahl enthält. Jetzt brauchen wir nur diese Tabelle zu durchsuchen, anstatt die gesamte Datenbank zu durchsuchen. Das ist viel schneller. Genau das ist ein Index.
Indizes helfen MongoDB, den zu durchsuchenden Datenbestand einzugrenzen. Dies wird Index Scan genannt, MongoDB hat auch eine Abkürzung dafür: IXNSCAN
Hier ist eine visuelle Darstellung eines Score Index und seines Mappings.
Die Leistungsverbesserung durch einen Index wird erst sichtbar, wenn die Anzahl der Dokumente 100K oder so überschreitet.
Sie können es selbst vergleichen, indem Sie zwei Abfragen vergleichen, eine mit einem indizierten Feld und eine ohne Index
db.<collection name>.find(query).explain()
Ein Objekt wird zurückgegeben
Objekt.winingPlan.stage zeigt den Typ des Scans COLLSCAN oder IXNSCAN
an, aber nicht die Ausführungszeit
Verwenden Sie die Methode explain(‚executionStat‘) vor einer Abfragemethode wie find
db.<collection name>explain('executionStat').find(query)
executionTimeMillis wird Ihnen die Zeit der Ausführung mitteilen
Nachteile von Index
Indizes sind nicht kostenlos, Indizes kosten Platz. Indizes können die Lesegeschwindigkeit erhöhen, aber immer wenn etwas geschrieben wird, muss der Index aktualisiert werden, um dies zu beheben verwenden wir B-Baum wir machen einige Berechnungen vor dem Einfügen, so dass es schneller ist.
B-Baum
Indizes sind keine Tabelle von Gruppen, konzeptionell ist es eigentlich ein B-Baum (Binary Tree) nicht nur MongoDB, SQL-Datenbank verwendet auch B-Baum für Indizierung
dieses Video erklärt B-Baum am besten