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

使用BETWEEN的DynamoDB PartiQL查询耗时更长,是否读取全部项?

DynamoDB PartiQL BETWEEN查询性能差异解析

问题场景

你的DynamoDB表结构为:identifier(HASH KEY)、time(RANGE KEY),两个同区间查询的性能差异明显:

  • 查询1:select * from "table_test" where identifier = "product_1" and time > "-1" limit=100,获取[150000,200000]区间数据耗时4秒
  • 查询2:select * from "table_test" where identifier = "product_1" and time between 150000 and 200000,相同区间耗时10秒

你疑问:DynamoDB是否会在应用BETWEEN条件前读取所有项?

核心结论

DynamoDB不会先读取所有项再应用BETWEEN条件。因为time是RANGE KEY,查询会直接定位到identifier="product_1"对应的分区,然后利用RANGE KEY的有序存储特性,直接扫描[150000,200000]这个区间的数据,不会遍历整个分区的所有条目。

性能差异原因

两个查询的耗时差距本质是返回数据量的不同:

  • 查询1通过limit=100限制了返回条数,DynamoDB在找到100条符合条件的记录后就会停止扫描,哪怕区间内有上万条数据,也只会处理前100条,所以耗时短。
  • 查询2没有加limit,会返回区间内的全部匹配数据,如果这个区间的条目数远大于100,DynamoDB需要扫描、读取并传输所有这些数据,IO和网络开销都比查询1大得多,自然耗时更长。

验证方法

  • 查看两个查询的ScannedCount和Count指标:查询1的ScannedCount≤100,查询2的ScannedCount等于该区间的总条目数。
  • 给查询2加上limit=100,即select * from "table_test" where identifier = "product_1" and time between 150000 and 200000 limit=100,此时耗时会和查询1接近,因为DynamoDB同样找到100条就停止扫描。

内容的提问来源于stack exchange,提问作者Tam Ho Chi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:12:33