如何使触发器具备良好的性能?

2008-04-02 10:30:22来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  通过SET NOCOUNT ON 命令使触发器具备更好的性能

  触发器使得表和跨数据库之间数据的自动同步行为变得简单。但是,那些一眼看上去不是很明显的东西却会对他们的性能造成显著的影响。这里我将描述一个命令,他可用来减少一些不可预料的问题产生的影响 。

  以反复被触发的INSERT触发器为例,尤其是当使用INSERT INTO语句用来进行大量插入操作时。在语句执行的过程中,当触发器一遍又一遍的被激发的情况下,触发器将会对每个INSERT动作发布DONE_IN_PROC消息,这会使速度明显下降。

  尤其是当触发器作为一个预定了时间的SQL Server Agent工作的结果而被触发时,这个速度的减慢是特别明显的 。SQL Server Agent自动在每个DONE_IN_PROC 信号后强加一个延迟,以避免服务器拥塞 。假如您想通过查询分析器来运行同样的一组命令,由于没有强加这样的延迟,他的执行将会快得多。假如您通过查询分析器运行这样的查询并且查看多个语句产生的多个"n rows affected",那么很有可能查询会被反复执行,并且触发器也被重新触发多次,这比他实际需要的次数要多很多。

  要关掉DONE_IN_PROC消息,能够在触发器语句的开始用SET NOCOUNT ON命令。大多数时候,以任何方式对行进行计数都是无需的。假如确实需要,您能够考虑重新构造命令来触发触发器(或是触发器本身),这样就使任何的改变作为一个命令完成。假如这个进程仍然花了很长时间,为了简单起见,您应该重新想一个方法来激发触发器。


标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 浅谈数据库设计技巧(下)

下一篇: SQL Server加密存储过程的破解问题(2)