DynamoDB为created_at建GSI,Between操作符该用哪种Builder?
解答
必须使用expression.KeyConditionBuilder来添加between操作符,具体原因和注意事项如下:
1. DynamoDB Query的核心规则
针对GSI的Query操作中:
KeyConditionExpression(由KeyConditionBuilder构建)仅用于指定GSI主键的条件:必须包含分区键的Equal条件,可附加排序键的范围条件(比如Between、GT/LT等),能直接利用索引的排序特性,查询效率极高。FilterExpression(由ConditionBuilder构建)是在获取到符合键条件的结果后再过滤,不会利用索引能力,会扫描所有符合键条件的项,性能极差。
2. 你的GSI设计要求
要实现created_at的between查询,新GSI必须将created_at设为排序键,同时搭配一个分区键:如果是全局时间范围查询,可设置固定值的分区键(比如bucket: "all");如果是按业务维度划分,可设置时间桶类的分区键(比如按天/月分区)。
3. 代码适配
你的代码已经正确实现了将between条件添加到KeyConditionBuilder的逻辑,只需确保:
- 查询时指定的
indexName是这个新GSI的名称。 - 如果GSI有分区键,必须先在
keyCondition中添加分区键的Equal条件,再通过And组合created_at的Between条件(这是DynamoDBQuery的强制要求)。
反模式提醒
绝对不要把created_at的between条件放到ConditionBuilder中,这会完全浪费GSI的索引能力,导致大量无效的数据扫描,违背了创建GSI的初衷。
内容的提问来源于stack exchange,提问作者kernelpanic
相关产品推荐
相关产品推荐

