我有桌子,
的例子Id int primary key(clustered index)
Name varchar(255)not null (non-clustered index)
..
..
Other columns
我执行存储过程为
update table1 set table1.Name=isnull(@Name,table1.Name) ,( updating other columns) where Id=@Id;
如果我将存储过程更改为
update table1 set ( updating other columns) where Id=@Id;
我看到成本:15%
我需要在两种情况下改变这种情况
答案 0 :(得分:0)
为解决我的问题,我创建了一个Triger
CREATE TRIGGER [dbo].[trg_BeforeUpdateSubject]
ON [dbo].[Subject]
INSTEAD OF UPDATE
AS
BEGIN
SET NOCOUNT ON;
declare @old_val nvarchar(255),@new_val nvarchar(255) ;
select
@old_val=[Name]
from deleted;
select
@new_val=[Name]
from inserted;
if (@old_val=@new_val)
BEGIN
UPDATE
Subject
SET
set new values for other colums,
Subject.DLC = GETDATE()
FROM
inserted
WHERE
Subject.Id = inserted.Id
END ELSE
BEGIN
UPDATE
Subject
SET
Subject.Name = inserted.Name,
set new values for other colums,
Subject.DLC = GETDATE()
FROM
inserted
WHERE
Subject.Id = inserted.Id
END
END
完美的工作。更新查询的平均值为90ms(CPU),旧值为200ms