七万号·数据平台实战手记

Back

① 标题党#

主标题DuckDB 快,是因为它连 CPU 缓存都算好了? 备选A为什么同样的查询,DuckDB 的缓存命中率更高 备选B(短视频)快,是一种精打细算

② 开场钩子#

你可能觉得数据库快不快看算法、看索引。但 DuckDB 比我见过的库都更在乎一件事:CPU 缓存。数据放不对地方,CPU 再好也白搭。

③ 主角特性:缓存局部性 / 批处理#

  • 缓存友好布局:向量化一次处理一个 block,数据在内存里连续相邻 → 命中 CPU 高速缓存(L1/L2),避免频繁访内存。
  • 减少随机访问:列存 + 批量处理让”下一个数据”大概率就在”上一个数据”旁边,预取命中率高。
  • 分析查询的”顺序扫描 + 聚合”模式,天然吃满缓存局部性。

反常识:有时候不是数据集太大,而是你的查询把 CPU 缓存”打爆”了。DuckDB 尽量让每一次 CPU 循环都干实事。

④ 最小可复现#

-- 数据连续排布,批量 scan
SELECT count(*) FROM t WHERE a > 100;
-- 观察内存带宽 vs 磁盘 IO(列存下大查询基本不吃 IO)
sql

⑤ 结论#

快,是精打细算出来的。DuckDB 从存储布局到执行方式,每一步都在帮你哄着 CPU 缓存。硬件还是那块硬件,你却感觉它变快了。

⑥ 配图脚本#

缓存层级示意图 / 顺序扫描 vs 随机访问 / 带宽对比 / 结论卡


缓存局部性:连 CPU 缓存它都算计好了
https://realcpf.tech/blog/duckdb-03
Author 刘佳成
Published at 2026年9月3日