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