DynamoDB 支援 secondary index 嗎?

支援。DynamoDB 支援兩種 secondary index。Global Secondary Index(GSI)有自己的 partition/sort key 與容量(預設每張表格 20 個,最終一致)。Local Secondary Index(LSI)與表格共用 partition key、搭配不同的 sort key,支援強一致性,而且必須在建立表格時定義。

Global Secondary Index(GSI)

  • 自己的 partition key 與 sort key,獨立於表格的鍵之外。
  • 自己的佈建輸送量(或隨需容量)。
  • 只支援最終一致讀取。
  • 隨時新增或移除;預設配額為每張表格 20 個

GSI 是你依表格 primary key 以外的屬性查找項目的方式。

Local Secondary Index(LSI)

  • 與表格共用 partition key,搭配不同的 sort key
  • 與表格共用輸送量
  • 支援強一致讀取。
  • 必須在建立表格時一併建立,之後無法補加。

兩個你可以量出來的差別

當你要求強一致性時,GSI 的讀取不會悄悄降級。它會失敗:

ValidationException: Consistent reads are not supported on global secondary indexes
HTTP 400

同一個帶 ConsistentRead: true 的查詢對 LSI 執行會成功,並回報 ConsumedCapacity 1.0,而同一個項目的最終一致讀取回報的是 0.5。強一致性在 LSI 上是可用的,代價是兩倍的讀取單位。

第二個差別在寫入這一側,而且是會出現在帳單上的那一個。把同一個 920 位元組的項目寫進三張只在 GSI 數量上不同的表格:

0 GSIs   ConsumedCapacity 1   table 1
1 GSI    ConsumedCapacity 2   table 1, gsi1 1
2 GSIs   ConsumedCapacity 3   table 1, gsi1 1, gsi2 1

每一個投影了被變更屬性的 GSI,都是你要付錢的另一次寫入。AWS 把這些數字所展現的規則寫了下來:寫入成本是 "the sum of write capacity units consumed by writing to the base table and those consumed by updating the global secondary indexes"。KEYS_ONLY 投影就是你把第二次寫入壓小的方法。

在兩者之間取捨

新的存取模式與彈性請找 GSI;當你需要在同一個分割區內、對另一個排序取得強一致性時,請找 LSI

深入了解

GSI 與 LSI 的比較中比較兩者,並參閱索引投影下載 DynoTable 即可透過你的索引執行查詢。

參考資料

最後驗證於 2026-07-13,對照上方連結的官方 AWS 文件;配額已於 2026-07-28 重新查核。

錯誤字串與各個 ConsumedCapacity 數值是於 2026-07-28 透過 @aws-sdk/client-dynamodb 3.1095.0,對照 DynamoDB Local 3.3.0 擷取而得,皆為引擎自身的輸出。

不必透過主控台就能操作 DynamoDB

一款快速的 DynamoDB 桌面用戶端,可執行 DynamoDB 無法執行的真正 SQL — JOINs、GROUP BY、聚合 — 並支援視覺化編輯與使用你自己的 Bedrock 金鑰的 AI 代理。

30 天免費試用,無需信用卡 — 之後為無時間限制的免費方案。