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

DynamoDB投影字段是否提升查询性能?两种方案如何选择?

DynamoDB 两种查询优化方案对比:GSI vs 主表投影

能不能通过字段投影返回更多条目?

不行。DynamoDB单次Query/Scan有两个硬性限制:

  • 结果集最大占1MB空间
  • 最多返回1024条数据

你的主表单条数据1KB,1024条刚好凑够1MB,两个限制同时触发。就算用投影把单条数据压缩到几十字节,1MB能装下上万条,但受限于“最多1024条”的限制,单次查询最多还是只能返回1024条,没法多拿。

两种方案哪个更优?

得看你的业务场景,从性能、成本、维护三个维度拆解:

方案1:建只存目标字段的GSI

优点

  • 查询性能更好:GSI只存first/last/middle name,单条数据体积远小于主表的1KB,查的时候读的数据总量少,IO消耗低,延迟也更低,高并发场景下优势特别明显。
  • 存储成本更低:GSI数据量小,长期存下来比主表全量存储省钱。

缺点

  • 写入成本涨一倍:写主表的时候得同步写GSI,额外耗IO,写入延迟会增加,成本也翻倍。
  • 改起来麻烦:以后要是需要加返回字段,得重新建GSI(没法直接改现有GSI的投影规则),操作繁琐。
  • 有数据冗余:GSI存了主表的部分重复数据,不算完全无冗余。

方案2:主表查询时指定投影字段

优点

  • 架构简单不用额外维护:不用建GSI,写数据只碰主表,没额外开销,也不用操心GSI的同步问题。
  • 灵活度高:以后要改返回字段,直接改查询里的投影参数就行,不用动表结构。
  • 无数据冗余:完全用主表的数据,不用额外存重复内容。

缺点

  • 性能不如GSI:DynamoDB查主表时,哪怕指定了投影,还是会把整个1KB的项目读到内存里再过滤字段,读IO和全字段查询一样,性能比查GSI差。

选哪个?

  • 如果这个“只查姓名”的请求量很大,或者对延迟要求特别高,选方案1(GSI),用写入成本和维护麻烦换更好的查询性能。
  • 如果查询频率不高,或者更看重省事、降低写入成本,选方案2(主表投影),长期维护更省心。

内容的提问来源于stack exchange,提问作者Joey Yi Zhao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:30:46