SQL 触发器如何影响性能?

How does SQL trigger affect performance?

我的 postgresql table 中有一个名为 traffic 的 table。我的流量 table 交易触发了一些触发器。我有两个名为 trigger1trigger2 的触发器。当一行被插入、更新或删除时,这些触发器将被触发。我想知道,SQL 触发器如何影响事务性能?

如果我的流量 table 插入事务需要 1 毫秒并且 trigger1 需要 2 毫秒并且 trigger2 需要 3 毫秒,插入成本是否为 1+2+3 = 6 毫秒?还是总插入事务 1ms 和触发器单独运行?

触发器运行作为数据修改语句的一部分,所以当语句完成时,触发器也是如此。在您的示例中,INSERT 将花费 6 毫秒。

此处的一个小例外是延迟约束触发器,它将在提交整个事务时运行。如果您 运行 使用多个语句执行事务,这些触发器将在语句完成后 运行。但是交易的总运行时间是一样的。

如果您是 inserting/updating 批量,您可能可以从 statement-level 触发器中获得一些好处。这是 Laurenz Albe 关于此主题的一篇很好的博客 post,他 post 已经向您发表了评论。

https://www.cybertec-postgresql.com/en/rules-or-triggers-to-log-bulk-updates/