UPDATE 表中的一个字段与UPDATE表中的多个字段, 在效益上是否有区别?

程序猿GG 2010-12-29 05:22:12

UPDATE TableName SET F1 = V1 WHERE Id = 1


UPDATE TableName SET F1 = V1, F2 = V2, F3 = V3, F4 = V4, F5 = V5, ..., Fn = Vn  WHERE Id = 1


这两个语句, 在效益上是否有区别?


注: 我个人觉得UPDATE 其实就是一个DELETE + INSERT, 所以没有区别.
...全文
265 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2010-12-30
  • 打赏
  • 举报
回复
至少在速度上有区别.

如果只更新一个字段,当然快.
如果更新多个字段,当然比只更新一个字段要慢.你可以试试.
Mr_Nice 2010-12-30
  • 打赏
  • 举报
回复
数据量一致的情况下。速度上还是有差异的。
索引维护上也会产生运算。
billpu 2010-12-29
  • 打赏
  • 举报
回复
没区别应该 但是有触发器的情况可能会不一样
程序猿GG 2010-12-29
  • 打赏
  • 举报
回复
我的问题可能没表述清楚.
如果一个表有N个栏位, 其中只有一个栏位需更新值,我写成
UPDATE TableName SET F1 = newValue WHERE Id = 1


UPDATE TableName SET F1 = newValue, F2 = F2_OleValue...... Fn = Fn_OldValue WHERE Id = 1

有无区别

因为我看到一个示例, 是将所所对Table的Insert,Update, Delete写在一个存储过程中, 他的Update语句就是对Table中的每个栏位都重新赋值. 所以我想知道在效益上有没有区别.
xman_78tom 2010-12-29
  • 打赏
  • 举报
回复
update 更新操作有两种可能的处理方式:就地更新,适用于不需要移动行的更新;删除-插入更新,适用于需要移动行的更新,此类更新也有可能导致分页。

如果 update 语句所操作的行所在的页面插槽中有足够的空间,则不会移动行,只会在原位置修改数据。

如果 update 语句所操作的行所在的页面插槽中没有足够的空间,或者更新了聚集索引表的主键,这样便会导致行移动,也就是执行“删除-插入”,另外还可能会导致“分页”。




rucypli 2010-12-29
  • 打赏
  • 举报
回复
假如别的列有索引 就有区别了

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧