sql - SQL Server 上的慢更新,即使没有记录更新

标签 sql sql-server performance

没有确认表锁定问题。

我有与此类似的更新语句。

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/

相关文章:

java - 使用专门类型进行 Scala 优化 : sum with longs

javascript - JS : event listener on hidden element

sql - 通过映射将列类型更改为枚举

c# - 尝试在 Linq 中实现 EXIST,但是嵌套查询的 where 子句中的 Any() 需要永远处理

sql - 那是什么样的结构呢?

c# - 应用程序启动失败,因为并行配置不正确

sql-server - BCP 语法问题

javascript - 为什么内联脚本 > 外部样式表比外部样式表 > 脚本更快?

SQL Server (TSQL) - 是否可以并行执行语句?

SQL Server 2008 Express CONCAT() 不存在?