DynamoDB supporta gli indici secondari?
Sì. DynamoDB supporta due tipi di indici secondari. Un indice secondario globale (GSI) ha una propria partition/sort key e una propria capacità (20 per tabella per impostazione predefinita, a coerenza eventuale). Un indice secondario locale (LSI) condivide la partition key della tabella con una sort key diversa, supporta la coerenza forte e deve essere definito alla creazione della tabella.
Indice secondario globale (GSI)
- Partition key e sort key proprie, indipendenti da quelle della tabella.
- Throughput con provisioning proprio (o capacità on-demand).
- Letture solo a coerenza eventuale.
- Aggiungibile o rimovibile in qualsiasi momento; quota predefinita di 20 per tabella.
Un GSI è il modo per cercare gli Item tramite un attributo che sta fuori dalla chiave primaria della tabella.
Indice secondario locale (LSI)
- Condivide la partition key della tabella, con una sort key diversa.
- Condivide il throughput della tabella.
- Supporta le letture fortemente coerenti.
- Va creato alla creazione della tabella e non può essere aggiunto in seguito.
Le due differenze che puoi misurare
Una lettura su GSI non fa silenziosamente un downgrade quando chiedi la coerenza forte. Fallisce:
ValidationException: Consistent reads are not supported on global secondary indexes
HTTP 400La stessa query con ConsistentRead: true su un LSI riesce, e riporta ConsumedCapacity 1.0 là dove la lettura a coerenza eventuale dello stesso Item riporta 0.5. Su un LSI la coerenza forte è disponibile, al doppio delle unità di lettura.
La seconda differenza è sulle scritture, ed è quella che si vede in fattura. Mettendo uno stesso identico Item da 920 byte in tre tabelle che differiscono solo per il numero di GSI che portano:
0 GSIs ConsumedCapacity 1 table 1
1 GSI ConsumedCapacity 2 table 1, gsi1 1
2 GSIs ConsumedCapacity 3 table 1, gsi1 1, gsi2 1Ogni GSI che proietta un attributo modificato è un'altra scrittura che paghi. AWS enuncia la regola che i numeri mostrano: il costo di scrittura è "the sum of write capacity units consumed by writing to the base table and those consumed by updating the global secondary indexes". Una proiezione KEYS_ONLY è il modo per tenere piccola quella seconda scrittura.
Come scegliere tra i due
Ricorri a un GSI per nuovi pattern di accesso e per la flessibilità; ricorri a un LSI quando ti serve la coerenza forte su un ordinamento alternativo all'interno della stessa partizione.
Approfondisci
Confrontali in GSI vs LSI e vedi le proiezioni degli indici. Scarica DynoTable per interrogare attraverso i tuoi indici.
Riferimenti
- Using Global Secondary Indexes in DynamoDB — Amazon DynamoDB Developer Guide
- Local secondary indexes — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra; quote riverificate il 2026-07-28.
La stringa di errore e i valori di ConsumedCapacity sono stati catturati il 2026-07-28 su DynamoDB Local 3.3.0 tramite @aws-sdk/client-dynamodb 3.1095.0 e sono l'output del motore stesso.