SQL Server通过它不需要锁定整个表

时间:2014-02-24 15:51:36

标签: sql sql-server transactions locking

我使用以下代码从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操作的结果。

有没有办法避免这种锁定?

3 个答案:

答案 0 :(得分:4)

你可以通过使搜索条件成为SARGable来至少尝试帮助服务器:

DELETE FROM MyTable WHERE CreationDate < '20140101'

假设CreationDate上有索引,可能现在可以使用该索引。

答案 1 :(得分:0)

我个人会选择与达米恩类似的东西......

Delete From MyTable Where CreationDate='2013'

Insert Into MyTable (Creation Date ) Values ( 2014-02-24 ) Where CreationDate=''

(“我希望手中的记录会被删除”

这将同时执行删除和插入,我认为你个人只有语法错误。

答案 2 :(得分:0)

尝试启用跟踪,您可以找到死锁情况