In MongoDB ermöglicht die Indexierung, Daten effizient zu durchsuchen, indem sie den Zugriff auf Dokumente in einer Sammlung beschleunigt. Ohne Index muss die Datenbank eine Collection-Scan durchführen, das heißt, jedes Dokument der Sammlung durchsuchen, was bei großen Datenmengen ineffizient ist.
Ein einzelner Feldindex wird für ein bestimmtes Feld erstellt. Dieser Typ beschleunigt Abfragen, die nach Werten in diesem Feld suchen.
db.collection.createIndex({ fieldName: 1 })Das 1 steht für eine aufsteigende
Sortierung, -1 würde eine absteigende
Sortierung bedeuten.
Ein zusammengesetzter Index umfasst mehrere Felder und wird verwendet, wenn Abfragen mehrere Felder gleichzeitig filtern oder sortieren.
db.collection.createIndex({ field1: 1, field2: -1 })Hier ist field1 aufsteigend sortiert und
field2 absteigend.
Ein Textindex dient zur Volltextsuche in String-Feldern. Er kann auf ein oder mehrere Felder angewendet werden.
db.collection.createIndex({ fieldName: "text" })Ein Geodatenindex unterstützt Abfragen, die geographische Daten (z. B. Längen- und Breitengrade) durchsuchen.
db.collection.createIndex({ location: "2dsphere" })Ein gehashter Index wird für Felder verwendet, die für Sharding oder eindeutige Abfragen gehasht werden.
db.collection.createIndex({ fieldName: "hashed" })Ein TTL-Index löscht automatisch Dokumente nach einer bestimmten Zeitspanne, die in einem Datumsfeld angegeben ist.
db.collection.createIndex({ fieldName: 1 }, { expireAfterSeconds: 3600 })Eindeutigkeit: Indizes können so definiert werden, dass sie eindeutig sind, was bedeutet, dass keine zwei Dokumente denselben Wert für das indizierte Feld besitzen dürfen.
db.collection.createIndex({ fieldName: 1 }, { unique: true })Sparse-Index: Ein Sparse-Index indiziert nur Dokumente, die das angegebene Feld enthalten, wodurch Speicherplatz gespart werden kann.
db.collection.createIndex({ fieldName: 1 }, { sparse: true })Partial-Index: Ein Partial-Index enthält nur Dokumente, die einer bestimmten Bedingung entsprechen.
db.collection.createIndex({ fieldName: 1 }, { partialFilterExpression: { status: "active" } })Abfrageanalyse mit Explain: Vor der
Indexerstellung sollte die Abfrage mit
.explain("executionStats") analysiert werden, um die
benötigten Indizes zu identifizieren.
db.collection.find({ fieldName: value }).explain("executionStats")Kombinierte Nutzung von Indizes: MongoDB kann mehrere Indizes in einer Abfrage kombinieren, wenn kein einzelner Index alle Filterbedingungen abdeckt.
Sortierung optimieren: Ein Index kann sowohl für die Filterung als auch für die Sortierung genutzt werden, wenn die Sortierreihenfolge mit der Indexreihenfolge übereinstimmt.
Angenommen, wir haben eine Sammlung users mit folgenden
Feldern:
{
"name": "John Doe",
"email": "john.doe@example.com",
"age": 30,
"location": [50.123, 8.456]
}Index für häufige Abfragen nach E-Mail:
db.users.createIndex({ email: 1 })Geodatenindex für Standortabfragen:
db.users.createIndex({ location: "2dsphere" })Kombinierter Index für Name und Alter:
db.users.createIndex({ name: 1, age: -1 })TTL-Index für alte Sessions:
db.sessions.createIndex({ createdAt: 1 }, { expireAfterSeconds: 3600 })Durch strategisches Erstellen und Verwalten von Indizes kann die Performance einer MongoDB-Datenbank erheblich verbessert werden.