我有一个更新表(30列和约150 000行)的简单查询。SQL:查询超时已过期
例如:
UPDATE tblSomeTable set F3 = @F3 where F1 = @F1
这个查询将影响约2500行。
的tblSomeTable具有触发:
ALTER TRIGGER [dbo].[trg_tblSomeTable]
ON [dbo].[tblSomeTable]
AFTER INSERT,DELETE,UPDATE
AS
BEGIN
declare @operationType nvarchar(1)
declare @createDate datetime
declare @UpdatedColumnsMask varbinary(500) = COLUMNS_UPDATED()
-- detect operation type
if not exists(select top 1 * from inserted)
begin
-- delete
SET @operationType = 'D'
SELECT @createDate = dbo.uf_DateWithCompTimeZone(CompanyId) FROM deleted
end
else if not exists(select top 1 * from deleted)
begin
-- insert
SET @operationType = 'I'
SELECT @createDate = dbo..uf_DateWithCompTimeZone(CompanyId) FROM inserted
end
else
begin
-- update
SET @operationType = 'U'
SELECT @createDate = dbo..uf_DateWithCompTimeZone(CompanyId) FROM inserted
end
-- log data to tmp table
INSERT INTO tbl1
SELECT
@createDate,
@operationType,
@status,
@updatedColumnsMask,
d.F1,
i.F1,
d.F2,
i.F2,
d.F3,
i.F3,
d.F4,
i.F4,
d.F5,
i.F5,
...
FROM (Select 1 as temp) t
LEFT JOIN inserted i on 1=1
LEFT JOIN deleted d on 1=1
END
如果我执行更新查询我有一个超时。
如何优化逻辑以避免超时?
谢谢。
其实什么记录看起来我错了,以及,可能是打算工会都在那里,而不是加入 – 2011-03-29 12:33:35
@Sam:我相信在日志表中的每个记录包含两个新的和旧版本的记录。 – Quassnoi 2011-03-29 12:39:03
是的,我看到了,我确实upvote你,因为这是一个很好的答案。然而,这里的日志记录机制看起来有点臃肿,我猜之前在同一行后可以节省一些时间,因为它更容易诊断(相对于有2行) – 2011-03-29 12:59:54