通过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命令。大多数时候,以任何方式对行进行计数都是不需要的。如果确实需要,你可以考虑重新构造命令来触发触发器(或者是触发器本身),这样就使所有的改变作为一个命令完成。如果这个进程仍然花了很长时间,为了简单起见,你应该重新想一个方法来激发触发器。
图 文 结 合:http://www.qqread.com/database/s640107052.html进入讨论组讨论。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- SQL Server连接中常见错误解决方法 (99次浏览)
- SQL server7.0的远程连接问题 (90次浏览)
- MySQL数据库配置技巧 (87次浏览)
- Oracle以网格技术解决成本难题 (31次浏览)
- 一个快速删除Oracle的好方法 (21次浏览)
- 验证DB2数据库备份是否成功 (21次浏览)
- Oracle数据库中的Copy命令 (19次浏览)
- nb思科交换机常用命令 (16次浏览)
- Oracle数据库中7个疑难问题的解决方法 (15次浏览)
- 教你正确的理解什么是数据库恢复 (14次浏览)



