You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS DynamoDB创建本地二级索引?控制台操作疑问

嘿,我刚好对这个问题很熟悉,来给你详细说清楚~

核心结论先给你

AWS管理控制台不能在已创建的DynamoDB表上添加本地二级索引(LSI),而且控制台的“创建索引”功能只会创建全局二级索引(GSI)——哪怕你用了和表分区键相同的字段,它依然会被标记为GSI,这不是控制台的bug,而是DynamoDB本身的规则限制。

不过,LSI并非完全不能通过控制台创建,只是有个关键前提:必须在创建新表的同时定义LSI,事后没法补加。

一、通过控制台创建带LSI的新表步骤

如果是新建表,控制台支持配置LSI,具体操作如下:

  1. 打开DynamoDB管理控制台,点击「创建表」
  2. 填写表的分区键(比如user_id),如果需要表的排序键也可以一并设置
  3. 向下滚动到「索引」区域,点击「添加本地二级索引」
  4. 配置LSI的排序键(注意:LSI的分区键会自动和表的分区键保持一致,不需要手动指定),然后选择投影属性(可选「全部属性」「仅键」「指定属性」)
  5. 完成其他表的配置项(比如读写容量、加密等)后,点击「创建表」即可

二、关于CLI创建LSI的补充(附完整示例)

如果你需要通过CLI创建带LSI的表,或者确认正确的配置格式,参考下面的示例命令:

aws dynamodb create-table \
    --table-name UserOrders \
    --attribute-definitions \
        AttributeName=user_id,AttributeType=S \
        AttributeName=order_timestamp,AttributeType=N \
        AttributeName=order_status,AttributeType=S \
    --key-schema \
        AttributeName=user_id,KeyType=HASH \
        AttributeName=order_timestamp,KeyType=RANGE \
    --local-secondary-indexes '[
        {
            "IndexName": "UserOrderStatusIndex",
            "KeySchema": [
                {"AttributeName": "user_id", "KeyType": "HASH"},
                {"AttributeName": "order_status", "KeyType": "RANGE"}
            ],
            "Projection": {
                "ProjectionType": "ALL"
            }
        }
    ]' \
    --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5

这里要注意:

  • AttributeDefinitions必须包含表的所有键,以及所有LSI的排序键
  • LSI的KeySchema里,分区键必须和表的HASH键完全一致,只能指定新的排序键

三、为什么你在已创建表上操作会变成GSI?

因为DynamoDB的LSI有个硬性规则:只能在表创建时定义,不支持事后添加。而控制台的「创建索引」功能,本质是为了支持事后添加GSI(GSI允许在表创建后随时添加)——哪怕你设置了和表相同的分区键,它依然是GSI,因为GSI有独立的分区空间,和LSI与表共享分区的逻辑完全不同。

内容的提问来源于stack exchange,提问作者anderwald

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 09:13:11