查一张几百万行的表,如果每处理一行,都要在“扫描、筛选、取列”几个环节间来回交接,CPU就像收银员每扫一件商品都重新走一遍流程。DuckDB快的重要原因之一,是向量化执行——不逐行处理,而把一批值连续交给同一个算子计算,从而摊薄函数调用、类型判断等固定开销,也更容易利用CPU缓存与批量指令。
传统Volcano执行模型会让上层算子不断调用下层的 next(),一次索取一行;一条数据要穿过整棵算子树,调用链随后从头再来。供稿援引2005年MonetDB/X100对TPC-H Query 1的测量:MySQL逐行执行的繁忙例程平均每个时钟周期完成0.8条指令,一次加法约耗49个CPU周期;X100成批处理相似运算时约为2.2个周期。这个历史对比并非DuckDB自身跑分,却直观说明了它所采用的思路:性能不只来自“算得更快”,也来自少做大量逐行交接。