View a markdown version of this page

Indice composto con più di 3 attributi - Amazon DocumentDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Indice composto con più di 3 attributi

Panoramica di

Un indice composto o composito mantiene i riferimenti a più campi all'interno di un'unica struttura di indice. Questi indici ottimizzano le prestazioni per le query che filtrano su più campi contemporaneamente o combinano il filtraggio con operazioni di ordinamento. Sono efficaci anche per le interrogazioni a condizione singola sui campi indicizzati più a sinistra. Il database sfrutta queste voci di indice per individuare in modo efficiente i documenti corrispondenti senza eseguire scansioni complete della raccolta.

Amazon DocumentDB può utilizzare l'indice composto per supportare query che includono qualsiasi sottoinsieme principale dei campi indicizzati, un concetto noto come prefissi di indice. Ad esempio, se hai un indice composto attivo{state: 1, city: 1, zipcode: 1}, Amazon DocumentDB può elaborare in modo efficiente le query che utilizzano solo il campo 'state', i campi 'state' e 'city' insieme o tutti e tre i campi 'state', 'city' e 'zipcode'. Tuttavia, le query devono utilizzare i campi da sinistra a destra senza saltare i campi intermedi. Ciò significa che le query che utilizzano solo il campo «città» o «codice postale» o combinazioni come «stato» e «codice postale» (saltando «città»), non possono utilizzare appieno l'indice.

Nella maggior parte degli scenari del mondo reale, gli indici composti con tre o meno attributi in genere garantiscono prestazioni ottimali ed efficienza delle risorse. Sebbene sia possibile avere più di 3 attributi nell'indice composito, spesso porta a un maggiore consumo di risorse, che supera i vantaggi.

Impatto sul cluster

Sebbene si sia tentati di creare un indice che copra tutte le condizioni di una query per ottenere le massime prestazioni teoriche, la maggior parte del filtraggio dei dati avviene tramite i primi 1-3 attributi di un indice composito. I campi aggiuntivi che superano questa soglia contribuiscono principalmente alla dimensione dell'indice piuttosto che a un'ottimizzazione significativa delle query.

Archiviazione e I/O costi generali: gli indici compositi con molti attributi consumano molto più spazio di archiviazione rispetto alle alternative più semplici. La dimensione è direttamente proporzionale al numero di attributi indicizzati e alla dimensione dei valori indicizzati stessi.

Impronta di memoria: l'ampio spazio di archiviazione degli indici compositi con molti attributi crea un'impronta corrispondente in memoria, ampliando il set di lavoro e sostituendo altri dati a cui si accede di frequente dal pool di buffer.

Operazioni di scrittura: ogni modifica del documento che interessa più campi indicizzati richiede l'aggiornamento dell'intera voce dell'indice composito, moltiplicando il lavoro necessario per completare l'operazione di scrittura.

Come identificare

Inizia esaminando tutti gli indici della tua raccolta per identificare gli indici compositi con più di tre attributi:

// 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 }

Correzione

Se viene utilizzato un indice composito con più di tre attributi, identifica le query che lo utilizzano e cerca opportunità di ottimizzazione. Valuta la possibilità di sostituire questi indici con altri più efficienti contenenti tre o meno attributi. Dopo aver implementato i nuovi indici, rimuovete i vecchi indici che contengono più di tre attributi.

Nota

Coordinatevi sempre con le parti interessate e convalidate l'impatto sulle prestazioni prima di eliminare qualsiasi indice.

Segui la regola Equality, Sort, Range (ESR) durante la creazione di indici compositi.

Regola ESR (Equality Sort Range): questo ordinamento massimizza l'efficienza dell'indice filtrando prima il set di dati con condizioni di uguaglianza, quindi applicando operazioni di ordinamento sul set ridotto e infine eseguendo scansioni degli intervalli sul sottoinsieme più piccolo possibile

  • ordina i campi come Uguaglianza (corrispondenze esatte),

  • Ordinamento (ordinamento),

  • Intervallo (>, <, $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