【发布时间】:2026-02-07 16:30:01
【问题描述】:
我正在使用以下代码从 SQL Server 表中删除行
DELETE FROM MyTable WHERE YEAR(CreationDate) <= 2013
并且(因为表很大 50GB)在执行此查询时我正在执行 INSERT:
INSERT INTO MyTable(...., CreationDate) VALUES(...., '2014-02-24')
(不要介意日期格式。这只是一个示例。)
但是,INSERT 会一直等到 DELETE 操作完成,尽管从逻辑上讲,SQL Server 可以执行 INSERT,因为它不会影响 DELETE 操作的结果。
有没有办法避免这种锁定?
【问题讨论】:
-
我不记得细节了,但是有一个阈值,超过这个阈值 MSSQL 决定锁定整个表。这是一种优化,另一种方法是锁定单个索引块,这可能会更慢。
标签: sql sql-server transactions locking