2011-12-13 36 views
3

我有一個觸發器在桌子上,它基本上是這個SQL觸發性能

ALTER TRIGGER xx 
FOR UPDATE,DELETE,INSERT 
AS 
    DELETE FROM other WHERE id in (SELECT id from deleted) 
    DELETE FROM other WHERE id in (SELECT id from inserted) 
    INSERT INTO other() VALUES() WHERE id in (SELECT id from inserted) 

GO 

它運行時,它的刀片(20秒),極爲緩慢。刪除速度很快。玩我嘗試這樣做,而不是:

ALTER TRIGER xx 
FOR UPDATE,DELETE,INSERT 
AS 
    DECLARE @tinserted TABLE (id int) 
    INSERT INTO @tinserted select id from inserted; 
    DELETE FROM other WHERE id in (SELECT id from deleted) 
    DELETE FROM other WHERE id in (SELECT id from inserted) 
    INSERT INTO other() VALUES() WHERE id in (SELECT id from @tinserted) 

GO 

通過使用表變量它現在立即運行(1秒以下)。

我不知道爲什麼。是否有任何理由改變爲表變量會產生這樣的差異?

回答

3

不確定爲什麼你需要在INSERT操作中使用WHERE子句。

INSERT INTO other(column1, column2, ...) 
    SELECT column1, column2, ... 
     FROM inserted;