Verständnis der Indizierung in MongoDB

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.