dev.to | 📄 原文链接 | 2026-10-16 收录

DuckDB 2.0 alpha 的触发器:按行比按语句贵三倍

来源:dev.to — 2026-10-15

📋 概述

DuckDB 2.0(代号 Cyanoptera)的预发布博文承诺支持「BEFORE/AFTER × 每行/每语句」的触发器,作者下载 alpha 版把八种组合对着 INSERT、UPDATE、DELETE 全试了一遍,结果五种还不能用,其中缺得最彻底的是 BEFORE——也就是大多数人最先想到、用来在数据落地前校验或拒绝一行的那一半。他用 50 万行的单次插入做基准:无触发器 0.073 秒;AFTER INSERT 每行触发器(记录 NEW.id)0.217 秒、约 3 倍;AFTER INSERT 每语句触发器(用过渡表记录整批)0.095 秒、约 1.3 倍。逻辑工作完全相同,差别只是按行的版本要穿过触发机器 50 万次,而不是作为一次集合操作完成。他还验证了过渡表确实每次语句只给一张、行数正确,所以语句级成本几乎与批量大小无关。同版本的「递归 CTE 引擎重写」他也复现了:换成 4 万节点的链式图后,1.5 版 18.57 秒、2.0 alpha 0.41 秒,约 45 倍。

🔑 核心要点

💡 金句

按行的版本做的逻辑工作和按语句的完全一样,但它要穿过触发机器 50 万次,而不是作为一次集合操作完成。
← 返回 dev.to 首页