我正在使用 mysql 数据库,现在我必须确保列中的值应该是 1
,而它可能已经是 1
。因此,考虑以下两个陈述:
UPDATE category SET is_leaf=1 WHERE id=9
或
UPDATE category SET is_leaf=1 WHERE id=9 AND is_leaf=0
id
是主键,不同的是当is_leaf已经是1时,那么更新还是不更新,哪个效率更高?
我知道这并不重要,但我想了解一下以更好地理解 mysql。
最佳答案
UPDATE category SET is_leaf=1 WHERE id=9 AND is_leaf=0
效率更高。因为这样它只会更新相关数据。否则即使is_leaf=1
记录也将更新。
假设表中有1000条记录,更新一条记录需要1s。如果你尝试更新所有记录,那么将需要 1000 S。但假设在这种情况下有 is_leaf=0
记录数为 150,那么如果您使用第二条语句,则只需 150 秒,而不是 1000 秒。
编辑:
带有搜索参数 (SARG) 的查询
WHERE 子句可帮助您限制查询返回的行数。但是,指定 WHERE 条件的方式可能会影响查询的性能。如果 WHERE 条件的编写方式使用将索引列作为输入的函数,则索引将被忽略并扫描整个表。这会导致性能下降。 例如,由于在函数中使用了 OrderDate 列,因此以下结果会导致表扫描:
SELECT CustomerID, EmployeeID FROM Orders
WHERE DATEDIFF(m, OrderDate, GetDate())>3
如果函数按如下所示重写,则查询将使用索引查找所需的值,这会提高性能:
SELECT CustomerID, EmployeeID FROM Orders
WHERE OrderDate < DATEADD(m, -3, GetDate())
第二个查询中的过滤条件据说使用可搜索参数或 SARG,因为查询优化器可以在执行期间使用索引查找操作。
有关这方面的更多信息,您最好阅读 improving query performance
关于mysql - 在更新 mysql 中的行时,有或没有附加条件哪种语句更有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14494250/