此查询是否有任何性能提升:
UPDATE tbl SET field = 1 WHERE field != 1
这个
UPDATE tbl SET field = 1
SQL解析器是否已经知道他确实需要更新已经是field = 1的行?
答案 0 :(得分:4)
条件field != 1
可能会使它更快,特别是在大多数值已经为1的情况下。假设索引可用于优化,数据库引擎将能够避免在这种情况下检查大多数记录。
更重要的是,也许是查询可能没有相同的结果。如果任何field
值为NULL,则第一个UPDATE语句将不更新这些值。第二个查询将NULL设置为1
。
另一个(相当明显的)它们不等同的情况是UPDATE触发器将触发第二个查询的所有记录(没有条件)但是它们不会针对跳过的行的第一个查询触发。
答案 1 :(得分:3)
如果只有几个字段!= 1
,那么添加WHERE
子句肯定会带来性能提升。即使MySQL没有将值写入磁盘,它仍然需要查看每一行以查看是否需要写入它,但它肯定不会添加WHERE
条款本身。