【发布时间】:2015-07-17 09:48:38
【问题描述】:
我有疑问
DECLARE @ids TABLE (
id BIGINT
);
DECLARE @dtDateLimit DATETIME;
SET @dtDateLimit = DATEADD(MINUTE, (-1) * @ResignTimeout, GETDATE());
UPDATE queue_local
SET [status] = @QueueLocalStatusToSign
OUTPUT INSERTED.id INTO @ids
WHERE [status] = @QueueLocalStatusSigning
AND status_date < @dtDateLimit;
根据执行计划,此子句更新主键索引(在“id”列上)。 这种行为有原因吗?
我问是因为我在这个索引上遇到了类似更新的死锁
UPDATE TOP (1) queue_local
SET [status] =
CASE
WHEN @SignError IS NULL THEN @QueueLocalStatusSigned
ELSE @QueueLocalStatusError
END
OUTPUT INSERTED.id INTO @ql_ids
WHERE task_sign_id = @ts_id
AND sono = @Sono
AND [status] = @QueueLocalStatusSigning
我尝试了解服务器行为
【问题讨论】:
-
表上的聚集索引是什么? (就此而言,表上的所有索引是什么)
标签: sql sql-server deadlock