MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB/Mongoose-Index macht die Abfrage schneller oder verlangsamt sie?

Du liest es falsch

Sie interpretieren die Absicht des dort zitierten Blocks dahingehend falsch, was .ensureIndex() ( jetzt veraltet, aber immer noch von Mungo-Code aufgerufen ) funktioniert hier tatsächlich im Kontext.

In Mongoose definieren Sie je nach Design einen Index entweder auf Schema- oder Modellebene. Was Mongoose „automatisch“ für Sie erledigt, ist, dass es bei der Verbindung jedes registrierte Modell inspiziert und dann das entsprechende .ensureIndex() aufruft Methoden für die bereitgestellten Indexdefinitionen.

Was macht das eigentlich?

Nun, in den meisten Fällen nachdem Sie Ihre Anwendung bereits gestartet haben und die .ensureIndexes() Methode ausgeführt wurde, ist Absolutely Nothing . Das ist ein bisschen übertrieben, aber es klingt mehr oder weniger wahr.

Da die Indexdefinition bereits auf der Serversammlung erstellt wurde, bewirkt ein nachfolgender Aufruf nichts. Das heißt, der Index wird nicht gelöscht und "neu erstellt". Die tatsächlichen Kosten betragen also im Grunde nichts, sobald der Index selbst erstellt wurde.

Indizes erstellen

Da Mongoose also nur eine Schicht über der Standard-API ist, ist der createIndex() -Methode enthält alle Details darüber, was passiert.

Hier sind einige Details zu beachten, z. B. dass eine Indexerstellung im "Hintergrund" erfolgen kann, und obwohl dies weniger aufdringlich für Ihre Anwendung ist, kommt es auf seine Kosten. Bemerkenswert ist, dass die Indexgröße aus der "Hintergrund"-Generierung größer ist, als wenn Sie sie im Vordergrund erstellen und andere Operationen blockieren.

Außerdem sind alle Indizes mit Kosten verbunden, insbesondere in Bezug auf die Festplattennutzung sowie zusätzliche Kosten für das Schreiben der zusätzlichen Informationen außerhalb der Sammlungsdaten selbst.

Die Vorteile eines Index bestehen darin, dass es viel schneller ist, nach in einem Index enthaltenen Werten zu "suchen", als die gesamte Sammlung zu durchsuchen und die möglichen Bedingungen abzugleichen.

Dies sind die grundlegenden "Kompromisse" im Zusammenhang mit Indizes.

Bereitstellungsmuster

Zurück zum Zitatblock Aus der Dokumentation geht hervor, dass hinter diesem Rat eine echte Absicht steckt.

In Bereitstellungsmustern und insbesondere bei Datenmigrationen ist es typisch, Dinge in dieser Reihenfolge zu tun:

  1. Füllen Sie Daten in relevante Sammlungen/Tabellen ein
  2. Aktivieren Sie Indizes für die Sammlungs-/Tabellendaten, die für Ihre Anforderungen relevant sind

Dies liegt daran, dass die Indexerstellung mit Kosten verbunden ist, und wie bereits erwähnt, ist es wünschenswert, die optimalste Größe aus der Indexerstellung zu erhalten und zu vermeiden, dass bei jeder Dokumenteneinfügung auch der Aufwand für das Schreiben eines Indexeintrags entsteht, wenn Sie es sind indem Sie dieses "Laden" in großen Mengen durchführen.

Dafür sind also Indizes da, das sind die Kosten und Vorteile und die Botschaft in der Mongoose-Dokumentation wird erklärt.

Im Allgemeinen empfehle ich jedoch, sich über Datenbankindizes zu informieren für das, was sie sind und was sie tun. Stellen Sie sich vor, Sie gehen in eine Bibliothek, um ein Buch zu finden. Dort am Eingang befindet sich eine Kartei. Gehen Sie in der Bibliothek herum, um das gewünschte Buch zu finden? Oder schaust du in der Kartei nach, wo es ist? Es hat einige Zeit gedauert, diesen Index zu erstellen und ihn auf dem neuesten Stand zu halten, aber es erspart "Ihnen" die Zeit, in der gesamten Bibliothek herumzulaufen, nur damit Sie Ihr Buch finden können.