2010-11-11 77 views
1

对用于更新,插入表中的触发器,并删除,但T-SQL创建脚本用于触发仅包含以下语句:没有代码的触发器会有性能损失吗?

SET NOCOUNT ON 

是否有(显著)性能损失这个触发器比较没有触发器?没有语句(代码)的触发器会有什么(显着的)性能损失,再次比较没有触发器?

+0

为什么你要保持一个触发器,它什么都不做? – HLGEM 2010-12-17 14:44:39

+1

@HLGEM - 我不会。当我发现它“什么都不做”时,我立即删除了引发这个问题的触发器。我问这个问题是因为我很好奇触发器可能产生的影响。 – 2010-12-17 14:49:49

回答

3

如果没有在什么样的优化器正在做什么,或者运行一系列测试深入的了解,以检查它的很难说。但是很难说你的想法有多重要。

所以每次取极端情况下,如果你正在做上千更新第二则触发会导致性能的下降显著的...在另一方面运行的一些更新一分钟,你可能不会在所有的通知。在任何一种情况下,触发器都将被编译,并可能优化为不存在。

自己,我不会理会表现,除非性能困扰着我。如果您认为这会导致您遇到问题,请对其进行测量,然后将其移除并重新测量。

本着同样的精神,我有一个DBA认为我应该取代合并(XYZ,0)与ISNULL(XYZ,0)。查询并没有打扰到我,但是建议做到了,所以我做了一些测量,发现速度确实快了30%。但在我的查询0.00000031用于两个聚结的呼唤,我没有改变我的查询; -

-1

该声明将附加消息传回给调用者。

试想一下,你有你的触发5个更新语句。如果您没有NOCOUNT行,则调用者将收到来自所有5条语句的消息。事情是这样的: (1行(S)的影响) (1行(S)的影响) (1行(S)的影响) (1行(S)的影响) (1行(S)的影响)

如果你有NOCOUNT语句集,那么他们将只能获得最终结果的消息: (1行(S)的影响)

这未必是一件坏事 - 一些系统不关心额外的消息,也许你的数据库不是那么大,你会关心任何性能影响。尽管其他一些系统很在意 - 我知道我必须记住在从Reporting Services(SSRS)调用的存储过程中使用NOCOUNT。

+0

我在询问触发器代码的性能损失,而不是“SET NOCOUNT ON”语句的功能。 – 2010-11-11 22:06:17

+0

我认为你说“如果你设置了NOCOUNT语句,那么他们只会收到最终结果信息:(1 row(s)affected)” - 他们甚至不会收到'最终结果信息'。 – 2010-12-30 15:52:41

+0

我不觉得答案值得-1,但这是你的问题。我觉得你的问题是关于声明本身的一个更普遍的问题。顺便说一句,你会得到一个“(1行受影响)”的消息与NOCOUNT声明。运行测试并亲自查看。 – 2011-02-09 21:28:09

相关问题