突然发现有一个语句
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的质量关系很大.不能一概而论.触发器多不是好事:
第一:一定会影响性能,若是数据量大时,每次都要触发上百上千触发器可想而知
第二:基于维护方面,不谈有多少触发器,当每修改一次触发表相应触发器就失效,符出代价可想而知.
不建义多用触发器,用函数与过程代替之.
看来以后还是要多注意触发器的使用
触发器不可以乱用
最新推荐文章于 2024-11-04 19:24:20 发布