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

MongoDB Viele Indizes im Vergleich zu einem einzelnen Index in einem Array von Unterdokumenten?

Dies läuft im Grunde darauf hinaus, ob 10 Indizes der Größe N effizienter sind als ein Index der Größe N * 10. Wenn Sie sich nur Lesevorgänge ansehen, sollten die separaten Indizes immer schneller sein. Die zugehörigen B-Tree-Walks untersuchen einen kleineren Keyset usw.

Es gibt jedoch ein paar Punkte zu beachten :

  • Indizes auf Array-Felder indizieren grundsätzlich jedes Array-Element separat. Als solches wird der Such-Overhead höchstens 1–2 zusätzliche Schritte während des B-Tree-Walk sein, was eine vernachlässigbare Leistungseinbuße darstellt. Mit anderen Worten, sie sind fast genauso schnell.
  • Das Vorhandensein von 10 Indizes kann bedeuten, dass für jede Aktualisierung/Einfügung mehr als ein Index aktualisiert werden muss (abhängig davon, ob Ihre Indizes ein Feld gemeinsam nutzen oder ob Sie mehr als einen Zeitstempel gleichzeitig aktualisieren). Dies ist ein wichtiger Leistungsaspekt.
  • Die Verwendung eines Array-Index macht es etwas einfacher, zusätzliche Zeitstempel hinzuzufügen (z. B. Timestamp10).
  • Die Anzahl der Namespaces, die Sie pro Datenbank verwenden können, ist begrenzt (24 KB), und jeder Index belegt einen. Wenn Sie einen separaten Index pro Feld erstellen, kann dies zu einem Problem werden.
  • Am wichtigsten ist, dass der Array-Index viel einfacher ist und Ihren Code und damit die Wartbarkeit vereinfacht. Angesichts der begrenzten Leistungsunterschiede würde ich sagen, dass dies die stärkste Motivation ist, sich hier für einen Array-Index zu entscheiden.