触发器不可以乱用

来源:互联网 发布:手机4g网络加速器 编辑:程序博客网 时间:2024/04/30 05:35

突然发现有一个语句
UPDATE dnt_users SET adminid = 0 WHERE groupid = 7
运行得特别慢,更新的数据是四万多条记录, 表里也是有四万多条记录。
在查看后发现库里有一个触发器

IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'TR_UpdateUserName' AND type = 'TR')
   DROP TRIGGER TR_UpdateUserName
GO
CREATE TRIGGER TR_UpdateUserName
ON dnt_users
FOR UPDATE
AS
BEGIN
------------------------(1)-------------------

------------------------(1)-------------------
END

这个触发器主要是用来当dnt_users这个表的username更新时,同时更新其它表的。

一开始以为是触发器里的(1)位置的语句不够优化的原因,但是后来就在(1)位置定义了一个变量,没有其它任何操作,更新时也是很慢。
当把触发器删除了,才变快。

在网上查了下资料:
 在大量并发的情况下,使用触发器是很危险的事。在并发量大的系统中触发器很影响性能的.
 如果非用不可,一定要注意SQL的质量.
 对性能的影响大小跟SQL的质量关系很大.不能一概而论.触发器多不是好事:  
  第一:一定会影响性能,若是数据量大时,每次都要触发上百上千触发器可想而知  
  第二:基于维护方面,不谈有多少触发器,当每修改一次触发表相应触发器就失效,符出代价可想而知.  
   
  不建义多用触发器,用函数与过程代替之.


看来以后还是要多注意触发器的使用