我使用以下代码从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操作的结果。
有没有办法避免这种锁定?
答案 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)
尝试启用跟踪,您可以找到死锁情况