用复合索引、ANALYZE 和 KV 缓存把 D1 账单砍掉 95%
Justin Ahinon 演示如何找出造成 1276 亿次 D1 行读取的四条查询,并用索引、ANALYZE 和布局级数据的 KV 旁路缓存修复。
- 适用产品
- D1KVWorkers
- 来源
- 作者经验Full Stack SvelteKit
- 作者
- Justin Ahinon
要点
- 他用 D1 控制台和 wrangler d1 insights 给查询排序:四条未走索引的全表扫描占了 93% 的读取,其中两条位于每个页面都会执行的布局加载函数里,表只有 76.5 万行。
- 修复:按过滤与分组模式建四个复合索引,再执行 ANALYZE(或 PRAGMA optimize)让查询规划器选对索引;一条聚合查询从约 100 万行降到 150,572 行。
- 随后他把一年才变一次的数据包进 KV 旁路缓存,键名带版本号并手动失效;仅索引一项就让 30 天读取量预计从约 4000 亿行降到 190 亿行。
- 官方 D1 文档(2026-10-14 复核):行读取按扫描行数计而非返回行数;Workers Paid 每月含 250 亿行,超出每百万 0.001 美元;索引指南建议建索引后执行 PRAGMA optimize。
原始来源
最后更新
用复合索引、ANALYZE 和 KV 缓存把 D1 账单砍掉 95%
打开原始来源Justin Ahinon 演示如何找出造成 1276 亿次 D1 行读取的四条查询,并用索引、ANALYZE 和布局级数据的 KV 旁路缓存修复。
其他推荐阅读
作者经验Workers +4
vibe coding 闯大祸,死循环干出 Cloudflare 10000 美元账单!应该怎么规避?
铁柱AGI(@cgnot996)在 X 长文中演示创建 Cloudflare 账单预算警报,说明它只是通知,列出放大费用的代码写法,并给出只读审计提示词和账单已起飞时的处理顺序。
其他产品
sylwair:项目失误,不到两天爆了近 900 刀。
@sylwair 称最近因项目失误爆了账单,不到两天爆了近 900 刀。他称在 Cloudflare【可计费使用量】中发现后停掉了异常服务;在回复中补充,由于每日账单延时展示,停服后看到金额没有明显下降。
作者经验Durable Objects +3
在 Durable Objects 上设计扑克游戏,让空闲时间不花钱
Philip Atkinson 介绍他在 Cloudflare 开发者平台上的多人扑克游戏架构,以及他遵循的成本原则:结束的对局移出 Durable Object 存储、WebSocket 休眠、用 alarm 唤醒、把日志当作成本决策。