【发布时间】:2010-10-04 23:52:22
【问题描述】:
我在一个表中有一个触发器,其中包含大量列(可能大约 100 个)和相当多的更新(对于“很多”的某些定义)。 如果某些字段中的任何一个发生了更改,则触发器会在另一个表中插入一些数据。
出于显而易见的原因,我希望此触发器尽可能快地运行。进行比较的最佳方法是什么? 现在我有这些:
IF NOT EXISTS (SELECT * FROM Inserted i, Deleted d WHERE
i.Fld1 = d.Fld1 AND i.Fld2 = d.Fld2 AND
i.Fld3 = d.Fld3 AND i.Fld4 = d.Fld4 AND
i.Fld5 = d.Fld5 AND i.Fld6 = d.Fld6 AND
i.Fld7 = d.Fld7)
THEN ...
IF ((SELECT Fld1 FROM Inserted) <> (SELECT Fld1 FROM Deleted) OR
(SELECT Fld2 FROM Inserted) <> (SELECT Fld2 FROM Deleted) OR
(SELECT Fld3 FROM Inserted) <> (SELECT Fld3 FROM Deleted) OR
(SELECT Fld4 FROM Inserted) <> (SELECT Fld4 FROM Deleted) OR
(SELECT Fld5 FROM Inserted) <> (SELECT Fld5 FROM Deleted) OR
(SELECT Fld6 FROM Inserted) <> (SELECT Fld6 FROM Deleted) OR
(SELECT Fld7 FROM Inserted) <> (SELECT Fld7 FROM Deleted))
THEN...
我通常更喜欢第一种方法,因为它更紧凑并且看起来更惯用。但是,当速度成为问题时,我应该怎么做?
【问题讨论】:
标签: sql-server tsql optimization triggers