mysql - 我是否应该使用 WHERE 来评估我要设置的字段?

标签 mysql where-clause

MySql 哪个更好:

UPDATE `table` SET value = 0 WHERE id = 1 AND value != 0;

UPDATE `table` SET value = 0 WHERE id = 1;

idvalue 需要为零,但可能已经为零。是否先评估它是否为零更有效,从而可能阻止更新?

最佳答案

如果您将其设置为已有的值,MySQL 将不会更新该行。这就是为什么“受影响的行”可能返回零,即使您在 id 上的条件找到了一行。如果您的更新不会导致值出现任何净差异,则行不会“受影响”。

查询的效率主要取决于选择最少的匹配行集。在您的情况下,您已经通过主键选择 id (我假设这是一个主键)。这与您希望的一样高效。

因此您通过主键进行查找,保证找到 1 行或零行(如果没有具有该 PK 值的行,则为后者)。

与 PK 查找本身相比,根据最多单行评估 WHERE 子句的第二项不是很大的开销。

差异(如果有的话)非常小,您可能应该先花时间优化其他查询,然后再将注意力转移到像这样的微优化上。

关于mysql - 我是否应该使用 WHERE 来评估我要设置的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49075129/

相关文章:

mysql - SQL 查询中的 Varchar 日期

php - 论坛搜索引擎,用于在 php 数据库中搜索关键字

mysql - CHAR(n) 如何以二进制表示其数据?

查询之间的Mysql日期不起作用

python - 对于排序数组来说,更快地替代 np.where

sql - 这个 sql where 语句正确吗?

powershell - Powershell对where-object的奇怪行为

php - 单击表格行以加载新表格

php - 使用 php 检查 MySQL 中重复用户的问题

mysql - 如何删除单个表中具有重复 row_id 但日期字段值不同的行?