O DynamoDB suporta índices secundários?
Sim. O DynamoDB suporta dois tipos de índice secundário. Um Índice Secundário Global (GSI) tem chave de partição/ordenação e capacidade próprias (20 por tabela por padrão, com consistência eventual). Um Índice Secundário Local (LSI) compartilha a chave de partição da tabela com uma chave de ordenação diferente, suporta consistência forte e precisa ser definido na criação da tabela.
Índice Secundário Global (GSI)
- Chave de partição e de ordenação próprias, independentes das da tabela.
- Throughput provisionado próprio (ou capacidade on-demand).
- Somente leituras com consistência eventual.
- Adicione ou remova a qualquer momento; cota padrão de 20 por tabela.
Um GSI é como você busca itens por um atributo fora da chave primária da tabela.
Índice Secundário Local (LSI)
- Compartilha a chave de partição da tabela, com uma chave de ordenação diferente.
- Compartilha o throughput da tabela.
- Suporta leituras com consistência forte.
- Precisa ser criado na criação da tabela e não pode ser adicionado depois.
As duas diferenças que você consegue medir
Uma leitura em GSI não é silenciosamente rebaixada quando você pede consistência forte. Ela falha:
ValidationException: Consistent reads are not supported on global secondary indexes
HTTP 400A mesma consulta com ConsistentRead: true contra um LSI tem sucesso, e reporta ConsumedCapacity 1.0 onde a leitura com consistência eventual do mesmo item reporta 0.5. A consistência forte está disponível em um LSI, ao dobro das unidades de leitura.
A segunda diferença está nas escritas, e é a que aparece na conta. Colocando um item idêntico de 920 bytes em três tabelas que diferem apenas em quantos GSIs carregam:
0 GSIs ConsumedCapacity 1 table 1
1 GSI ConsumedCapacity 2 table 1, gsi1 1
2 GSIs ConsumedCapacity 3 table 1, gsi1 1, gsi2 1Todo GSI que projeta um atributo alterado é mais uma escrita que você paga. A AWS enuncia a regra que os números mostram: o custo de escrita é "the sum of write capacity units consumed by writing to the base table and those consumed by updating the global secondary indexes". Uma projeção KEYS_ONLY é como você mantém essa segunda escrita pequena.
Escolhendo entre eles
Vá de GSI para novos padrões de acesso e flexibilidade; vá de LSI quando você precisar de consistência forte em uma ordenação alternativa dentro da mesma partição.
Aprofunde-se
Compare-os em GSI vs LSI e veja projeções de índice. Baixe o DynoTable para consultar através dos seus índices.
Referências
- 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
Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima; cotas reconferidas em 2026-07-28.
A string de erro e os valores de ConsumedCapacity foram capturados em 2026-07-28 contra o DynamoDB Local 3.3.0 via @aws-sdk/client-dynamodb 3.1095.0 e são a saída literal do motor.