没有确认表锁定问题。
我有与此类似的更新语句。
UPDATE table1
SET table1.col1 = table2.col2
FROM table1,table2
WHERE table1.id = table2.id
即使在没有记录要更新的情况下,这也需要永远
运行查询
SELECT *
FROM table1,table2
WHERE table1.id = table2.id
是即时的。
找到的解决方案:对于它的值(value),我按照建议打开了“包括实际执行计划”,它推荐了 3 个我没有的索引,现在执行整个存储过程,即 190 条 SQL 语句处理具有 1600 万行的表在不到 1 分钟的时间内。感谢提出这个建议的人。
最佳答案
实际上,您每次都在更新每一行。您需要将以下内容添加到您的 where 子句中:
AND table1.col1 <> table2.col2
您可能需要添加
ISNULL
如果这些是可为空的字段,则包装到每一侧。哪个更快:阅读一本书还是在书中的每个单词上写下完全相同的单词?仅仅因为您在原始值上写入相同的值并不会改变您正在写入值的事实。
现在,如果您有一个 where 子句过滤掉具有匹配值的记录,而您的性能仍然非常低,那么可能的罪魁祸首是索引过多。我猜这不是你的问题...
关于sql - SQL Server 上的慢更新,即使没有记录更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8993761/