哪个在MySql中更好:
UPDATE `table` SET value = 0 WHERE id = 1 AND value != 0;
要么
UPDATE `table` SET value = 0 WHERE id = 1;
该value
的id
需要为零,但可能已经为零。是否更有效地评估它是否为零,从而可能阻止更新?
如果您将其设置为已有的值,MySQL将不会更新该行。这就是为什么“受影响的行”可能会返回零,即使你在id
上的条件发现了一行。如果您的更新不会导致值的任何净差异,则行不会“受影响”。
查询的效率主要取决于选择最小匹配行集。在你的情况下,你已经通过主键id
选择(我假设这是一个主键)。这就像你希望的那样高效。
所以你用主键进行查找,保证找到1行或零行(后者如果没有具有该PK值的行)。
与PK查找本身相比,对最多一行评估WHERE子句的第二项并不是一个重要的开销。
差异(如果有的话)是如此之小,以至于你应该把时间花在优化其他查询上,然后再将注意力转向像这样的微优化。