Warum Indizes?
Verstehe zwei wichtige Punkte.
- Während ein Index besser ist als kein Index, ist der richtige Index viel besser als beide.
- MongoDB verwendet nur einen Index pro Abfrage, wodurch zusammengesetzte Indizes mit der richtigen Feldreihenfolge erstellt werden, die Sie wahrscheinlich verwenden möchten.
Indizes sind nicht kostenlos. Sie belegen Speicherplatz und führen zu Leistungseinbußen beim Einfügen, Aktualisieren und Löschen. Normalerweise ist der Leistungseinbruch vernachlässigbar (insbesondere im Vergleich zu Verbesserungen der Leseleistung), aber das bedeutet nicht, dass wir beim Erstellen unserer Indizes nicht klug sein können.
Wie Indizes
Um festzustellen, welche Gruppe von Feldern zusammen indiziert werden soll, müssen Sie die von Ihnen ausgeführten Abfragen verstehen. Die Reihenfolge der Felder, die zum Erstellen Ihres Index verwendet werden, ist entscheidend. Die gute Nachricht ist, dass der Index bei falscher Reihenfolge überhaupt nicht verwendet wird, sodass es leicht zu erklären ist.
Warum sortieren?
Ihre Abfragen müssen möglicherweise sortiert werden. Das Sortieren kann jedoch eine teure Operation sein. Daher ist es wichtig, die Felder, nach denen Sie sortieren, wie ein Feld zu behandeln, das Sie abfragen. Es wird also schneller sein, wenn es einen Index hat. Es gibt jedoch einen wichtigen Unterschied: Das Feld, das Sie sortieren, muss das letzte Feld in Ihrem Index sein. Die einzige Ausnahme von dieser Regel besteht darin, dass die Must-be-last-Regel nicht gilt, wenn das Feld auch Teil Ihrer Abfrage ist.
Wie sortieren
Sie können eine Sortierung für alle Schlüssel des Index oder für eine Teilmenge angeben. Die Sortierschlüssel müssen jedoch in derselben Reihenfolge aufgelistet werden, in der sie im Index angezeigt werden. Beispielsweise kann ein Indexschlüsselmuster {a: 1, b: 1} eine Sortierung nach {a: 1, b: 1} unterstützen, jedoch nicht nach {b: 1, a: 1}.
Die Sortierung muss für alle Schlüssel dieselbe Sortierrichtung (dh aufsteigend / absteigend) wie das Indexschlüsselmuster oder für alle Schlüssel die umgekehrte Sortierrichtung als Indexschlüsselmuster angeben. Beispielsweise kann ein Indexschlüsselmuster {a: 1, b: 1} eine Sortierung nach {a: 1, b: 1} und {a: -1, b: -1} unterstützen, jedoch nicht nach {a: -1 , b: 1}.
Angenommen, es gibt diese Indizes:
{ a: 1 }
{ a: 1, b: 1 }
{ a: 1, b: 1, c: 1 }
Example Index Used
db.data.find().sort( { a: 1 } ) { a: 1 }
db.data.find().sort( { a: -1 } ) { a: 1 }
db.data.find().sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: -1, b: -1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: 1, b: 1, c: 1 } ) { a: 1, b: 1, c: 1 }
db.data.find( { a: { $gt: 4 } } ).sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
1, 3, 2, 6, 5, 4, 7
?