DuckDB 对 Pandas:换一次就快十倍的原理
来源:dev.to — 2026-09-13
📋 概述
作者在 M2 Pro 上用 500 万行、约 1.2GB 的模拟订单 CSV 对比两种写法:读 CSV 从 18.4 秒降到 1.2 秒(约 15 倍),分组求和从 4.1 秒到 0.3 秒,两表连接从 22.7 秒到 1.8 秒,读 Parquet 从 3.2 秒到 0.09 秒(约 36 倍)。原因有三条:列式向量化引擎只读用到的列并用 SIMD 分块处理、查询编译加自动多核并行、以及可以流式处理大于内存的文件。文末也列出了什么时候仍应继续用 pandas。
🔑 核心要点
- 读 500 万行 CSV 差约 15 倍,读 Parquet 差距最大,约 36 倍。
- pandas 按行存储,即使只求一列的 SUM 也要扫过所有列。
- DuckDB 是列式向量化引擎,用 64 元素分块加 SIMD 并行处理。
- DuckDB 能在 8GB 内存的机器上查询 50GB 的文件,pandas 会直接 OOM。
- pandas 加 engine="pyarrow" 可多线程读取,能缩小 CSV 读取差距。
💡 金句
DuckDB 赢了每一项测试,差距最大的是列式 Parquet 读取——而这恰好是现代数据湖存数据的方式。
👍 0
👎 0
← 返回 dev.to 首页