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 即可透過你的索引執行查詢。
參考資料
- 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
最後驗證於 2026-07-13,對照上方連結的官方 AWS 文件;配額已於 2026-07-28 重新查核。
錯誤字串與各個 ConsumedCapacity 數值是於 2026-07-28 透過 @aws-sdk/client-dynamodb 3.1095.0,對照 DynamoDB Local 3.3.0 擷取而得,皆為引擎自身的輸出。