So verbessern Sie Abfragen mit der MongoDB-Indizierung

So Verbessern Sie Abfragen Mit Der Mongodb Indizierung



Die Verbesserung der Abfragegeschwindigkeit ist für MongoDB und alle anderen Datenbanksysteme von entscheidender Bedeutung. Durch den Aufbau von Datenstrukturen, die MongoDB dabei helfen, Datensätze schneller zu identifizieren, ist die Indizierung ein wirkungsvoller Ansatz zur Beschleunigung und Optimierung von Suchvorgängen. In den Indizes sind Kopien einiger Daten aus Datensätzen enthalten, um Untersuchungen effektiver zu gestalten. Dadurch wird der Aufwand für die Beantwortung von Anfragen in MongoDB optimiert. In diesem Leitfaden besprechen wir die Verwendung von Indizes mithilfe verschiedener Indizierungstypen.

Sammlung erstellen

Bevor wir Indizes verwenden, müssen wir eine neue Sammlung in unserer MongoDB erstellen. Wir haben bereits eines erstellt und 10 Dokumente mit dem Namen „Dummy“ eingefügt. Die Funktion find() MongoDB zeigt alle Datensätze aus der „Dummy“-Sammlung auf dem MongoDB-Shell-Bildschirm unten an.

test> db.Dummy.find()







Wählen Sie den Indexierungstyp

Bevor Sie einen Index erstellen, müssen Sie zunächst die Spalten bestimmen, die häufig in Abfragekriterien verwendet werden. Indizes funktionieren gut bei Spalten, die häufig gefiltert, sortiert oder durchsucht werden. Felder mit einer großen Kardinalität (viele verschiedene Werte) sind oft hervorragende Indizierungsoptionen. Hier sind einige Codebeispiele für verschiedene Indextypen.



Beispiel 01: Einzelfeldindex

Es handelt sich wahrscheinlich um den grundlegendsten Indextyp, der eine einzelne Spalte indiziert, um die Abfragegeschwindigkeit für diese Spalte zu erhöhen. Dieser Indextyp wird für Abfragen verwendet, bei denen Sie ein einzelnes Schlüsselfeld zum Abfragen der Sammlungsdatensätze verwenden. Gehen Sie davon aus, dass Sie das Feld „Typ“ verwenden, um die Datensätze der Sammlung „Dummy“ innerhalb der Suchfunktion wie unten beschrieben abzufragen. Dieser Befehl durchsucht die gesamte Sammlung, was bei großen Sammlungen lange dauern kann. Daher müssen wir die Leistung dieser Abfrage optimieren.



test> db.Dummy.find({type: „emp“ })





Die Datensätze der obigen Dummy-Sammlung wurden mithilfe des Felds „Typ“ gefunden, d. h. sie enthalten eine Bedingung. Daher kann hier der Single-Key-Index zur Optimierung der Suchanfrage genutzt werden. Daher werden wir die Funktion createIndex() von MongoDB verwenden, um einen Index für das Feld „type“ der „Dummy“-Sammlung zu erstellen. Die Abbildung zur Verwendung dieser Abfrage zeigt die erfolgreiche Erstellung eines Einzelschlüsselindex mit dem Namen „type_1“ in der Shell.

test> db.Dummy.createIndex({ Typ: 1 })

Lassen Sie uns die find()-Abfrage verwenden, sobald sie das Feld „Typ“ verwendet. Der Vorgang wird jetzt erheblich schneller sein als die zuvor verwendete Funktion find(), da der Index vorhanden ist, da MongoDB den Index verwenden kann, um die Datensätze mit der angeforderten Berufsbezeichnung schnell abzurufen.



test> db.Dummy.find({type: „emp“ })

Beispiel 02: Zusammengesetzter Index

Unter bestimmten Umständen möchten wir möglicherweise nach Artikeln suchen, die auf verschiedenen Kriterien basieren. Die Implementierung eines zusammengesetzten Index für diese Felder kann zur Verbesserung der Abfrageleistung beitragen. Nehmen wir an, Sie möchten dieses Mal in der Sammlung „Dummy“ suchen und dabei mehrere Felder verwenden, die unterschiedliche Suchbedingungen enthalten, während die Abfrage angezeigt wird. Diese Abfrage hat nach Datensätzen aus der Sammlung gesucht, bei denen das Feld „type“ auf „emp“ gesetzt ist und das Feld „sal“ größer als 350 ist.

Der logische Operator $gte wurde verwendet, um die Bedingung auf das Feld „sal“ anzuwenden. Nach der Durchsuchung der gesamten Sammlung, die aus 10 Datensätzen besteht, wurden insgesamt zwei Datensätze zurückgegeben.

test> db.Dummy.find({type: „emp“ , sal: {$gte: 350 } })

Erstellen wir einen zusammengesetzten Index für die oben genannte Abfrage. Dieser zusammengesetzte Index verfügt über die Felder „type“ und „sal“. Die Zahlen „1“ und „-1“ stellen die aufsteigende bzw. absteigende Reihenfolge für die Felder „type“ und „sal“ dar. Die Reihenfolge der Spalten des zusammengesetzten Indexes ist wichtig und sollte den Abfragemustern entsprechen. Die MongoDB hat diesem zusammengesetzten Index wie angezeigt den Namen „type_1_sal_-1“ gegeben.

test> db.Dummy.createIndex({ Typ: 1 , Wille:- 1 })

Nachdem wir dieselbe find()-Abfrage verwendet haben, um nach Datensätzen zu suchen, deren Wert im Feld „type“ „emp“ lautet und deren Wert im Feld „sal“ größer als gleich 350 ist, haben wir dieselbe Ausgabe mit einer geringfügigen Änderung in der Reihenfolge erhalten im Vergleich zum vorherigen Abfrageergebnis. Der Datensatz mit dem größeren Wert für das Feld „sal“ steht jetzt an erster Stelle, während der kleinste am niedrigsten ist, entsprechend der „-1“-Einstellung für das Feld „sal“ im obigen zusammengesetzten Index.

test> db.Dummy.find({type: „emp“ , sal: {$gte: 350 } })

Beispiel 03: Textindex

Manchmal kann es vorkommen, dass Sie sich mit einem großen Datensatz befassen müssen, etwa mit umfangreichen Beschreibungen von Produkten, Inhaltsstoffen usw. Ein Textindex kann für die Durchführung einer Volltextsuche in einem großen Textfeld hilfreich sein. Beispielsweise haben wir in unserer Testdatenbank eine neue Sammlung mit dem Namen „Test“ erstellt. Mit der Funktion insertMany() gemäß der folgenden find()-Abfrage wurden insgesamt 6 Datensätze in diese Sammlung eingefügt.

test> db.Test.insertMany([

{Name: „Ana“ , des: „Sie lebt in London und ist eine gute Lehrerin“ },

{Name: 'Robert' , des: „Er ist so ein großartiger Fußballspieler“ },

{Name: 'aus' , des: „Vielleicht reise ich nach Dubai“ },

{Name: 'Jacob' , des: „Er ist umwerfend und reich.“ },

{Name: „Cillian“ , des: „Ein Superstart eines Films wurde in Sekundenschnelle berühmt“ },

{Name: „Ken“ , des: „Essensliebhaberin. Sie kann dich auch essen.“ }

])

Jetzt erstellen wir einen Textindex für das Feld „Des“ dieser Sammlung, indem wir die Funktion createIndex() von MongoDB verwenden. Das Schlüsselwort „text“ im Feldwert zeigt den Typ eines Index an, bei dem es sich um einen „Text“-Index handelt. Der Indexname des_text wurde automatisch generiert.

test> db.Test.createIndex({ des: 'Text' })

Jetzt wurde die Funktion find() verwendet, um die „Textsuche“ in der Sammlung über den Index „des_text“ durchzuführen. Der $search-Operator wurde verwendet, um in den Sammlungsdatensätzen nach dem Wort „Lebensmittel“ zu suchen und diesen bestimmten Datensatz anzuzeigen.

test> db.Test.find({ $text: { $search: 'Essen' }});

Indizes überprüfen:

Sie können alle angewendeten Indizes verschiedener Sammlungen in Ihrer MongoDB überprüfen und auflisten. Verwenden Sie dazu die Methode getIndexes() zusammen mit dem Namen einer Sammlung in Ihrem MongoDB-Shell-Bildschirm. Wir haben diesen Befehl separat für die Sammlungen „Test“ und „Dummy“ verwendet. Dadurch werden alle notwendigen Informationen zu den integrierten und benutzerdefinierten Indizes auf Ihrem Bildschirm angezeigt.

test> db.Test.getIndexes()

test> db.Dummy.getIndexes()

Drop-Indizes:

Es ist an der Zeit, die Indizes zu löschen, die zuvor mit der Funktion dropIndex() für die Sammlung erstellt wurden, zusammen mit demselben Feldnamen, auf den der Index angewendet wurde. Die folgende Abfrage zeigt, dass der einzelne Index entfernt wurde.

test> db.Dummy.dropIndex({type: 1 })

Auf die gleiche Weise kann der zusammengesetzte Index gelöscht werden.

test> db.Dummy.drop index({type: 1 , Wille: 1 })

Abschluss

Durch die Beschleunigung des Datenabrufs aus MongoDB ist die Indizierung für die Steigerung der Effizienz von Abfragen von entscheidender Bedeutung. Da es keine Indizes gibt, muss MongoDB die gesamte Sammlung nach passenden Datensätzen durchsuchen, was mit zunehmender Größe der Menge weniger effektiv wird. Die Fähigkeit von MongoDB, mithilfe der Indexdatenbankstruktur schnell die richtigen Datensätze zu finden, beschleunigt die Verarbeitung von Abfragen, wenn eine geeignete Indizierung verwendet wird.