我有一個更新表(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