使用SET NOCOUNT ON得到更佳的触发器性能

触发器使得在表格和交叉数据库之间自动同步变得更容易。但是其性能可能会受到初看起来不明显的事物很大的影响。这里我将指出一个能减少这种无法预料问题影响的命令。

  例如,INSERT触发器重复地被激活,尤其当使用“INSERT INTO”语句进行大量的插入操作时。在这种触发器一再被激活的情况下,触发器每个插入操作会发出“DONE_IN_PROC”信息,这会严重地减慢速度。

  如果触发器正在作为计划结构化查询语言服务器代理程序的结果工作,这种减速尤其明显。结构化查询语言服务器代理程序自动地对后来的每个“DONE_IN_PROC”信号施加一个延时,以避免服务器拥塞。如果你尝试通过查询分析器运行同样的指令集,由于没有这样的延时,它将执行得更快。如果你通过查询分析器运行这样的一个查询,并且检查多重的" n rows affected "语句,很可能查询会被重复地进行并且比实际所需的再多激活触发器很多次。

  关闭“DONE_IN_PROC”信息,可以在一个触发器语句开始的时候使用“SET NOCOUNT ON”命令。触发器时常不需要行计数器。如果是这样,你可以考虑改变激活触发器的命令(或者触发器本身),使得所有变更一次完成。如果这过程仍然费时太久,为了简化起见,你应该重新考虑触发器被激活的方式。


------------------------------------------------------------------------------------------

作用:阻止在结果中返回受 Transact-Sql 影响的行数。

应用:对于一些存储过程或者触发器不返回实际数据(如 插入和删除操作),或者不需要获得 查询得到的数量,那么设置    SET NOCOUNT ON 可以避免向客户端发送 DONE_IN_PROC 消息(也就是不向客户端返回受影响的行数),减少了网络流量,可以显著提高性能。

测试:在 Sql Server 2005 设置 SET NOCOUNT ON 那么查询后消息框里显示的是【命令已成功完成。】。如果设置 SET NOCOUNT OFF 则会显示【nn 行受影响。】



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值