表上有一个触发器用于更新,插入和删除,但触发器的T-SQL create-script只包含以下语句:
SET NOCOUNT ON
与没有触发器相比,此触发器是否存在(显着)性能损失?对于没有语句(代码)的触发器,会不会有任何(重大)性能损失,再次与没有触发器相比?
答案 0 :(得分:3)
如果没有深入了解优化器正在做什么,或者运行一堆测试来检查它很难说。但是很难说你对重要的看法有多重要。
所以要采取每个极端,如果你每秒进行数千次更新,那么触发器可能会导致性能显着下降......另一方面,运行一些更新,你可能根本不会注意到。在任何一种情况下,触发器都将被编译,并且可能已经优化。
除非表现困扰我,否则我不会打扰表演。如果您认为它导致问题,请对其进行测量,删除并重新测量。
与此类似,我有一个DBA建议我应该用Isnull(xyz,0)替换Coalesce(xyz,0)。查询并没有打扰我,但建议确实如此,所以我做了一些测量,发现确实快了30%。但是在我的查询中,对于两个合并的callin中的每一个,0.00000031,我没有改变我的查询; -
答案 1 :(得分:-1)
此语句使额外的消息不会传递回调用者。
想象一下,你的触发器中有5个更新语句。如果您没有NOCOUNT行,则调用者将收到来自所有5个语句的消息。像这样的东西: (1排受影响) (1排受影响) (1排受影响) (1排受影响) (1行受影响)
如果您设置了NOCOUNT语句,那么它们只会收到最终结果消息: (1行受影响)
这不一定是坏事 - 有些系统并不关心额外的消息,也许你的数据库不是那么大,你会关心任何性能损失。虽然其他一些系统确实关心 - 我知道我必须记住在从Reporting Services(SSRS)调用的存储过程中使用NOCOUNT。