【问题标题】:Update all rows to same value or update certain ones only? [closed]将所有行更新为相同的值或仅更新某些行? [关闭]
【发布时间】:2021-07-25 02:33:44
【问题描述】:

有一张表,其中有一列“分数”和 10 行。 2 行有 10 分,其他 8 行有 0 分。我想将所有行的分数设置为0。哪种方式更优化?:

  1. UPDATE <table> SET scores = 0

  2. UPDATE <table> SET scores = 0 WHERE scores <> 0

【问题讨论】:

  • 我认为选项二,它比选项一所需的限制更少,并且它只会更新实际需要它的行。请记住,您的系统、架构和数据都是其中的重要因素。
  • pre optimization is the root of all evil 所以,请不要在只更新几条记录时考虑这个问题。
  • 我总是赞成第二种选择。让 DBMS 准确更新需要更新的行。您更新的每一行都可能导致锁定、额外检查、回滚区域中的条目、审核日志条目以及触发本身可能执行昂贵操作的触发器。

标签: sql optimization sql-update


【解决方案1】:

这完全取决于您使用的数据库。

一些数据库会在更新行之前检查值是否发生变化(并产生日志记录的开销)。

有些数据库会更新所有指定的行,即使值没有改变。

不过,一般来说,我会使用WHERE 子句。但是,在这种情况下,您确实需要小心 NULL 值。

而且,对于 12 行,性能并不重要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多