

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Zusammengesetzter Index mit mehr als 3 Attributen
<a name="anti-pattern-compound-index"></a>

## -Übersicht
<a name="compound-index-overview"></a>

Ein zusammengesetzter oder zusammengesetzter Index verwaltet Verweise auf mehrere Felder innerhalb einer einzigen Indexstruktur. Diese Indizes optimieren die Leistung für Abfragen, die nach mehreren Feldern gleichzeitig filtern oder Filterung mit Sortiervorgängen kombinieren. Sie eignen sich auch für Abfragen mit einer einzigen Bedingung in den indizierten Feldern ganz links. Die Datenbank nutzt diese Indexeinträge, um passende Dokumente effizient zu finden, ohne die Sammlung vollständig scannen zu müssen.

Amazon DocumentDB kann den zusammengesetzten Index verwenden, um Abfragen zu unterstützen, die eine beliebige führende Teilmenge der indizierten Felder enthalten. Dieses Konzept wird als Indexpräfixe bezeichnet. Wenn Sie beispielsweise einen zusammengesetzten Index aktiviert haben`{state: 1, city: 1, zipcode: 1}`, kann Amazon DocumentDB Abfragen effizient verarbeiten, die nur das Feld „state“, die Felder „state“ und „city“ zusammen oder alle drei Felder „state“, „city“ und „zip code“ verwenden. Abfragen müssen jedoch die Felder von links nach rechts verwenden, ohne dass Felder dazwischen übersprungen werden. Das bedeutet, dass Abfragen, die nur das Feld „Stadt“ oder „Postleitzahl“ oder Kombinationen wie „Bundesland“ und „Postleitzahl“ (ohne „Stadt“) verwenden, den Index nicht vollständig nutzen können.

In den meisten realen Szenarien erzielen zusammengesetzte Indizes mit drei oder weniger Attributen in der Regel optimale Leistung und Ressourceneffizienz. Es ist zwar möglich, mehr als 3 Attribute im zusammengesetzten Index zu haben, führt jedoch häufig zu einem erhöhten Ressourcenverbrauch, der die Vorteile überwiegt.

## Auswirkungen auf den Cluster
<a name="compound-index-impact"></a>

Es ist zwar verlockend, einen Index zu erstellen, der alle Bedingungen in einer Abfrage abdeckt, um eine maximale theoretische Leistung zu erzielen, aber die meisten Datenfilterung erfolgt über die ersten 1—3 Attribute in einem zusammengesetzten Index. Zusätzliche Felder, die diesen Schwellenwert überschreiten, tragen in erster Linie zur Indexgröße und nicht zur sinnvollen Abfrageoptimierung bei.

**Speicherplatz und I/O Overhead**: Zusammengesetzte Indizes mit vielen Attributen verbrauchen deutlich mehr Speicherplatz als einfachere Alternativen. Die Größe ist direkt proportional zur Anzahl der indizierten Attribute und zur Größe der indizierten Werte selbst.

**Speicherbedarf**: Der große Speicherbedarf zusammengesetzter Indizes mit vielen Attributen führt zu einem entsprechenden Speicherbedarf, wodurch Ihr Arbeitssatz größer wird und andere häufig aufgerufene Daten aus dem Pufferpool verdrängt werden.

**Schreiboperationen**: Jede Änderung eines Dokuments, die sich auf mehrere indizierte Felder auswirkt, erfordert die Aktualisierung des gesamten zusammengesetzten Indexeintrags, wodurch der Arbeitsaufwand für den Schreibvorgang vervielfacht wird.

## Wie identifiziert man
<a name="compound-index-identify"></a>

Überprüfen Sie zunächst alle Indizes in Ihrer Sammlung, um zusammengesetzte Indizes mit mehr als drei Attributen zu identifizieren:

```
// List all indexes for the collection
db.collection.getIndexes()

// Look for indexes with 3+ fields like:

// { "userId": 1, "status": 1, "category": 1, "priority": 1, "region": 1 }
// { "orderId": 1, "customerId": 1, "productId": 1, "timestamp": 1, "warehouse": 1 }
```

## Abhilfe
<a name="compound-index-remediation"></a>

Wenn ein zusammengesetzter Index mit mehr als drei Attributen verwendet wird, identifizieren Sie die Abfragen, die ihn verwenden, und suchen Sie nach Optimierungsmöglichkeiten. Erwägen Sie, diese Indizes durch effizientere Indizes mit drei oder weniger Attributen zu ersetzen. Entfernen Sie nach der Implementierung der neuen Indizes die alten Indizes, die mehr als drei Attribute enthalten.

**Anmerkung**  
Stimmen Sie sich stets mit den Stakeholdern ab und überprüfen Sie die Auswirkungen auf die Leistung, bevor Sie Indizes löschen.

Halten Sie sich bei der Erstellung zusammengesetzter Indizes an die ESR-Regel (Equality, Sort, Range).

**Equality Sort Range (ESR) -Regel**: Diese Reihenfolge maximiert die Indexeffizienz, indem der Datensatz zunächst nach Gleichheitsbedingungen gefiltert wird, dann Sortieroperationen auf die reduzierte Menge angewendet und schließlich Bereichsscans für die kleinstmögliche Teilmenge durchgeführt werden
+ Felder nach Gleichheit (exakte Treffer) anordnen,
+ Sortieren (Reihenfolge),
+ Bereich (>, <, $in).

```
// Query pattern
db.orders.find({ 
  userId: "user123",                    // Equality
  price: { $gte: 50, $lte: 200 }      // Range
}).sort({ createdAt: -1 })             // Sort

// Optimal index following ESR rule
db.orders.createIndex({ userId: 1, createdAt: -1, price: 1 })
//                      Equality   Sort         Range
```