sql-server - 仅更新已更改的值或同时更新未更改和已更改的值在性能上是否存在差异?

标签 sql-server

我有一个设置页面,用户可以在其中选择更新他们的信息。由于他们的信息在他们可以选择编辑的文本字段中显示为默认值,因此当他们提交表单时,即使他们没有更改,我也会更新他们的信息。

那么,是在执行更新之前检查值是否已更改更好,还是继续更新未更改和更改的值就可以了?

最佳答案

my tests ,只要我们讨论的是行内列并且没有附加索引,那么只更新整行总是有意义的,而不是挑选已更改值的各个列。

当我们处理 LOB 列时,这可能会有所不同,这些列通常存储在行外,并且有一些额外的开销(包括检查相等性和更新本身)。

在执行更新之前,我没有进行测试以确保至少有一个列已更改。 可能值得检查并避免不必要的工作,具体取决于您的表/索引结构,以及在没有任何更改的情况下尝试执行更新的时间百分比。

我也没有测试当您正在更新的列也在非聚集索引中时的影响。索引越多,您就越有可能从首先检查中获益。如果您有 18 个包含特定列的非聚集索引,并且该列值实际上并未更改,则避免该更新可能是有意义的。

您可以遵循相同的测试技术来衡量其中的任何一个......

关于sql-server - 仅更新已更改的值或同时更新未更改和已更改的值在性能上是否存在差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48426603/

相关文章:

c# - SQL 网络接口(interface),错误 : 50 - Local Database Runtime error occurred. 无法创建自动实例

sql-server - azure sql中带有OUTPUT子句的删除语句

c# - 如何配置连接字符串到 RDS 实例 (MSSQLServer Express)

mysql - 在 SQL 表中动态插入 R 输出

sql - 存储过程检查参数是否为 NULL

SQL Server : export query as a . txt 文件

json - 使用 FOR JSON PATH 创建嵌套 JSON 数组

c# - 如何在 ASP.NET MVC/SQL 应用程序中正确编码外来重音字符(请提供 C-R-U 示例)

sql-server - SQL 中的 IF 条件表达式评估

c# - 每次对其执行操作时,SqlDataReader 对象都会抛出异常