1

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

UPDATE tbl SET field = 1 WHERE field != 1

超过这个

UPDATE tbl SET field = 1

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

4

2 回答 2

4

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

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

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

于 2012-04-18T22:28:16.020 回答
3

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

于 2012-04-18T22:27:19.357 回答