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 400

La 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 1

Ogni 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

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.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.