mysql - 在更新 mysql 中的行时,有或没有附加条件哪种语句更有效

标签 mysql sql-update

我正在使用 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

并阅读此内容 Speeding up Searches and Filters

关于mysql - 在更新 mysql 中的行时,有或没有附加条件哪种语句更有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14494250/

相关文章:

php - SQL 更新不工作

mysql - RMySQL 错误地查询类型为 bit 的列

mysql - DB中的索引是什么意思?

mysql - 使用内连接和动态更新进行选择

mysql - 更新除一个结果以外的所有结果?

如果满足计数条件则 MySQL 更新

MySql 排序 varchar as int,以字符开头

php - 如何使用 APIController 在 CakePHP 中插入数据?

mysql - 使用连接表进行 sql 更新

javascript - Sql 未在 UPDATE 上设置值