Auf dieser Seite wird die Indexierung für Cloud Firestore beschrieben. Cloud Firestore werden standardmäßig keine Indexe erstellt. Um die Datenbankleistung zu verbessern, erstellen Sie Indexe für Ihre am häufigsten verwendeten Abfragen.
Indexe haben einen großen Einfluss auf die Leistung einer Datenbank. Wenn ein Index für eine Abfrage vorhanden ist, kann die Datenbank Ergebnisse effizient zurückgeben, indem die Menge der zu scannenden Daten und der Aufwand zum Sortieren der Ergebnisse reduziert werden. Indexeinträge erhöhen jedoch die Speicherkosten und den Aufwand bei einem Schreibvorgang für indexierte Felder.
Indexdefinition und -struktur
Ein Index besteht aus Folgendem:
- einer Sammlungs-ID
- einer Liste von Feldern in der angegebenen Sammlung
- einer Reihenfolge (aufsteigend oder absteigend) für jedes Feld
Ein Index kann auch die Optionen „Dünnbesetzt“, „Mehrschlüssel“ oder „Eindeutig“ aktivieren.
Indexreihenfolge
Die Reihenfolge und Sortierrichtung jedes Felds definieren den Index eindeutig. Die folgenden Indexe sind beispielsweise zwei unterschiedliche Indexe und nicht austauschbar:
| Sammlung | Felder |
|---|---|
| Städte | Land (aufsteigend), Bevölkerung (absteigend) |
| Städte | Bevölkerung (absteigend), Land (aufsteigend) |
Wenn Sie einen Index zur Unterstützung einer Abfrage erstellen, fügen Sie die Felder in derselben Reihenfolge wie in der Abfrage ein.
Indexdichte
Standardmäßig werden in Indexeinträgen Daten aus allen Dokumenten in einer Sammlung gespeichert. Dies wird als nicht dünnbesetzter Index bezeichnet. Für ein Dokument wird ein Indexeintrag hinzugefügt, unabhängig davon, ob das Dokument eines der im Index angegebenen Felder enthält. Nicht vorhandene Felder werden beim Generieren von Indexeinträgen als NULL-Werte behandelt. Um dieses Verhalten zu ändern, können Sie den Index als dünnbesetzten Index definieren.
Dünnbesetzte Indexe
Ein dünnbesetzter Index indexiert nur die Dokumente in der Sammlung, die einen Wert (einschließlich Null) für mindestens eines der indexierten Felder enthalten. Ein dünnbesetzter Index reduziert die Speicherkosten und kann die Leistung verbessern.
Mehrschlüsselindexe für Arraywerte
Wenn Sie einen Index für ein Feld mit Arraywerten erstellen, müssen Sie einen Mehrschlüsselindex erstellen. Mit einem regulären Index können keine Arraywerte indexiert werden. Ein Mehrschlüsselindex unterstützt bis zu ein Arrayfeld in der Indexdefinition und kann für Vorgänge verwendet werden, die Arraywerte durchlaufen.
Verwenden Sie Mehrschlüsselindexe nur, wenn Sie Arraywerte indexieren müssen. Reguläre Indexe haben Vorteile bei der Verarbeitung einer Abfrage. Beispielsweise können reguläre Indexe Werte in einem Bereich effizienter filtern.
Die folgenden Situationen führen zu Fehlern, wenn Sie mit Arraywerten und Mehrschlüsselindexen arbeiten:
- Ein Vorgang versucht, einem Feld, das mit einem regulären Index indexiert wurde, einen Arraywert hinzuzufügen. Um den Arraywert hinzuzufügen, müssen Sie vorhandene reguläre Indexe für dieses Feld löschen und sie als Mehrschlüsselindexe neu erstellen.
- Sie versuchen, einen regulären Index für ein Feld zu erstellen, das einen Arraywert enthält. Sie müssen entweder einen Mehrschlüsselindex erstellen oder die Arraywerte löschen.
- Ein Vorgang versucht, mehrere Felder mit Arraywerten zu indexieren. In einem Mehrschlüsselindex kann nur ein Feld mit einem Arraywert vorhanden sein. Ändern Sie dazu Ihr Datenmodell oder Ihre Indexdefinitionen.
- Sie versuchen, einen Mehrschlüsselindex zu erstellen, bei dem zwei Feldpfade ein gemeinsames Präfix haben, z. B.
users.postsundusers.zip.
Eindeutige Indexe
Legen Sie die Option für eindeutige Indexe fest, um eindeutige Werte für die indexierten Felder zu erzwingen. Bei Indexen für mehrere Felder muss jede Kombination von Werten im Index eindeutig sein. Die Datenbank lehnt alle Aktualisierungs- und Einfügevorgänge ab, bei denen versucht wird, Indexeinträge mit doppelten Werten zu erstellen. Wenn die Daten der indexierten Felder doppelte Werte enthalten und Sie versuchen, einen eindeutigen Index zu erstellen, schlägt die Indexerstellung mit einer Fehlermeldung in den Vorgangsdetails fehl.
Fehlende Felder in einem eindeutigen Index
Wenn Sie ein Dokument mit fehlenden Feldern für den eindeutigen Index einfügen, werden für die fehlenden Felder null-Werte festgelegt. Der resultierende Indexeintrag muss eindeutig sein, andernfalls schlägt der Vorgang fehl.
Beispiel: Bei diesem Index:
db.cities.createIndex( { "name": 1 }, { unique: true } )
Wenn Sie der Sammlung das Dokument {"abbreviation": "LA"} hinzufügen, erstellt der eindeutige
Index einen Eintrag, bei dem name auf null gesetzt ist. Wenn Sie dann versuchen, das
Dokument {"abbreviation": "NYC"} hinzuzufügen, schlägt der Vorgang fehl, da der resultierende
Eintrag für den eindeutigen Index derselbe ist.
Dasselbe Verhalten gilt für eindeutige Indexe mit mehreren Feldern.
Beim Erstellen oder Aktualisieren eines Dokuments werden fehlende indexierte Felder auf null gesetzt und der resultierende Indexeintrag muss im Index eindeutig sein.
TTL-Indexe
Verwenden Sie TTL-Indexe, um veraltete Daten automatisch aus Ihren Datenbanken zu entfernen. In einem TTL-Index wird ein bestimmtes Feld als Ablaufzeit für Dokumente in einer bestimmten Sammlung festgelegt. Mit TTL können Sie die Speicherkosten senken, indem Sie veraltete Daten entfernen. Daten werden in der Regel innerhalb von 24 Stunden nach Ablauf der Gültigkeitsdauer gelöscht.
Fehler bei der Indexerstellung beheben
Beim Verwalten von Indexen können Fehler bei der Indexerstellung auftreten. Ein Indexierungsvorgang kann fehlschlagen, wenn in der Datenbank ein Problem mit den Daten auftritt. Indexierungsvorgänge können aus folgenden Gründen fehlschlagen:
- Sie haben ein Indexlimit erreicht. Beispielsweise hat der Vorgang möglicherweise die maximale Anzahl von Indexeinträgen pro Dokument erreicht. Wenn die Indexerstellung fehlschlägt, wird eine Fehlermeldung angezeigt. Wenn Sie kein Indexlimit erreicht haben, wiederholen Sie den Indexierungsvorgang.
- Ein Mehrschlüsselindex ist erforderlich. Mindestens eines der indexierten Felder enthält einen Arraywert. Verwenden Sie dazu entweder einen Mehrschlüsselindex oder löschen Sie die Arraywerte.
- Ein Vorgang versucht, mehrere Felder mit Arraywerten zu indexieren. In einem Mehrschlüsselindex kann nur ein Feld mit einem Arraywert vorhanden sein. Ändern Sie dazu Ihr Datenmodell oder Ihre Indexdefinitionen.
- Sie haben die Option für eindeutige Indexe festgelegt und die Daten der indexierten Felder würden doppelte Indexeinträge erstellen. Entfernen Sie dazu doppelte Kombinationen von Werten aus den Daten.
Nächste Schritte
- Erfahren Sie, wie Sie Indexe erstellen und verwalten oder TTL-Indexe