如何在AWS DynamoDB创建本地二级索引?控制台操作疑问
嘿,我刚好对这个问题很熟悉,来给你详细说清楚~
核心结论先给你
AWS管理控制台不能在已创建的DynamoDB表上添加本地二级索引(LSI),而且控制台的“创建索引”功能只会创建全局二级索引(GSI)——哪怕你用了和表分区键相同的字段,它依然会被标记为GSI,这不是控制台的bug,而是DynamoDB本身的规则限制。
不过,LSI并非完全不能通过控制台创建,只是有个关键前提:必须在创建新表的同时定义LSI,事后没法补加。
一、通过控制台创建带LSI的新表步骤
如果是新建表,控制台支持配置LSI,具体操作如下:
- 打开DynamoDB管理控制台,点击「创建表」
- 填写表的分区键(比如
user_id),如果需要表的排序键也可以一并设置 - 向下滚动到「索引」区域,点击「添加本地二级索引」
- 配置LSI的排序键(注意:LSI的分区键会自动和表的分区键保持一致,不需要手动指定),然后选择投影属性(可选「全部属性」「仅键」「指定属性」)
- 完成其他表的配置项(比如读写容量、加密等)后,点击「创建表」即可
二、关于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
相关产品推荐
相关产品推荐

