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

Warum und wann müssen Indizes in MongoDB neu erstellt werden?

Gemäß der MongoDB-Dokumentation besteht im Allgemeinen keine Notwendigkeit, Indizes routinemäßig neu zu erstellen.

HINWEIS :Jegliche Ratschläge zur Speicherung werden mit MongoDB 3.0+ interessanter, das einen Plug-in-Speicher-Engine-API . Meine Kommentare unten beziehen sich speziell auf die standardmäßige MMAP-Speicher-Engine in MongoDB 3.0 und früher. WiredTiger und andere Speicher-Engines haben unterschiedliche Speicherimplementierungen für Daten und Indizes.

Es kann einige Vorteile haben, einen Index mit der MMAP-Speicher-Engine neu zu erstellen, wenn:

  • Ein Index verbraucht im Vergleich zu den Daten mehr Speicherplatz als erwartet. Hinweis:Sie müssen historische Daten und die Indexgröße überwachen, um eine Vergleichsbasis zu haben.

  • Sie möchten von einem älteren Indexformat auf ein neueres migrieren. Wenn eine Neuindizierung ratsam ist, wird dies in den Upgrade-Hinweisen erwähnt. Zum Beispiel führte MongoDB 2.0 signifikante Indexleistungsverbesserungen Daher enthalten die Versionshinweise eine vorgeschlagene Neuindizierung in das v2.0-Format nach dem Upgrade. In ähnlicher Weise führte MongoDB 2.6 2dsphere ein (v2.0)-Indizes die ein anderes Standardverhalten haben (standardmäßig spärlich). Vorhandene Indizes werden nach Upgrades der Indexversion nicht neu erstellt; die Wahl, ob/wann ein Upgrade durchgeführt werden soll, bleibt dem Datenbankadministrator überlassen.

  • Sie haben die _id geändert Format für eine Sammlung zu oder von einem monoton ansteigenden Schlüssel (z. B. ObjectID) zu einem zufälligen Wert. Das ist ein bisschen esoterisch, aber es gibt eine Indexoptimierung, die B-Tree-Buckets 90/10 (statt 50/50) aufteilt, wenn Sie _id einfügen s, die immer größer werden (ref:SERVER-983 ). ). Wenn die Art Ihrer _id s erheblich ändert, kann es möglich sein, mit einer Neuindizierung einen effizienteren B-Baum zu erstellen.

Weitere Informationen zum allgemeinen B-Tree-Verhalten finden Sie unter:Wikipedia:B-tree

Visualisierung der Indexnutzung

Wenn Sie wirklich neugierig sind, ein bisschen mehr in die Interna des Index einzutauchen, gibt es einige experimentelle Befehle/Tools, die Sie ausprobieren können. Ich gehe davon aus, dass diese nur auf MongoDB 2.4 und 2.6 beschränkt sind: