【发布时间】:2011-08-31 00:07:11
【问题描述】:
我在 SQL Server 2008 R2 下遇到了以下超时问题,而不是删除触发器。只有在同一事务中删除许多(> 6 个左右)CustomFieldOptions 时才会出现这种情况。
CREATE TRIGGER dbo.[DeleteCustomFieldOptionInsteadOfTrigger] ON dbo.[CustomFieldOption] INSTEAD OF DELETE
AS
BEGIN
SET NOCOUNT ON;
UPDATE ucf SET ucf.PendingCustomFieldOptionIdValue = NULL, ucf.PendingProposedStateId = NULL
FROM UserCustomField ucf
INNER JOIN deleted d ON d.CustomFieldOptionId = ucf.PendingCustomFieldOptionIdValue
WHERE ucf.CurrentCustomFieldOptionIdValue IS NOT NULL;
SET NOCOUNT ON;
DELETE ucf FROM UserCustomField ucf
INNER JOIN deleted d ON d.CustomFieldOptionId = ucf.PendingCustomFieldOptionIdValue
WHERE ucf.CurrentCustomFieldOptionIdValue IS NULL;
SET NOCOUNT ON;
DELETE ucf FROM UserCustomField ucf
INNER JOIN deleted d ON d.CustomFieldOptionId = ucf.CurrentCustomFieldOptionIdValue;
SET NOCOUNT ON;
DELETE cfo FROM CustomFieldOption cfo
INNER JOIN deleted d ON d.CustomFieldOptionId = cfo.CustomFieldOptionId;
SET NOCOUNT OFF;
END
我意识到可能需要进一步的上下文(我会根据需要更新问题)——我在这里做的事情明显错了吗?
【问题讨论】:
-
为“死锁”和“死锁图”运行分析器跟踪
-
@Mitch Wheat:你能说得更具体一点吗,请回复:我需要做的追踪?
-
您的表是否为您正在执行的
deleted上的联接提供适当的索引?这些语句的执行计划是什么样的? -
@Martin Smith:你能提供一些关于在这种情况下你认为合适索引的细节吗?
-
@Martin Smith:感谢您的提示;在我的 UserCustomField 表中为外键添加索引解决了这个问题 - 如果您将评论添加为答案,我将接受它作为解决方案。
标签: sql-server sql-server-2008 triggers