UPDATE tbl SET field = x WHERE field!= x?

时间:2012-04-18 22:25:00

标签: mysql sql

此查询是否有任何性能提升:

UPDATE tbl SET field = 1 WHERE field != 1

这个

UPDATE tbl SET field = 1

SQL解析器是否已经知道他确实需要更新已经是field = 1的行?

2 个答案:

答案 0 :(得分:4)

条件field != 1可能会使它更快,特别是在大多数值已经为1的情况下。假设索引可用于优化,数据库引擎将能够避免在这种情况下检查大多数记录。

更重要的是,也许是查询可能没有相同的结果。如果任何field值为NULL,则第一个UPDATE语句将不更新这些值。第二个查询将NULL设置为1

另一个(相当明显的)它们不等同的情况是UPDATE触发器将触发第二个查询的所有记录(没有条件)但是它们不会针对跳过的行的第一个查询触发。

答案 1 :(得分:3)

如果只有几个字段!= 1,那么添加WHERE子句肯定会带来性能提升。即使MySQL没有值写入磁盘,它仍然需要查看每一行以查看是否需要写入它,但它肯定不会添加WHERE条款本身。