我应该使用WHERE来评估我要设置的字段吗?

问题描述 投票:1回答:1

哪个在MySql中更好:

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

要么

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

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

mysql where
1个回答
2
投票

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

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

所以你用主键进行查找,保证找到1行或零行(后者如果没有具有该PK值的行)。

与PK查找本身相比,对最多一行评估WHERE子句的第二项并不是一个重要的开销。

差异(如果有的话)是如此之小,以至于你应该把时间花在优化其他查询上,然后再将注意力转向像这样的微优化。

© www.soinside.com 2019 - 2024. All rights reserved.