在 MyISAM 中使用或不使用附加条件可以更快地更新?

问题描述

我正在尝试使用 MysqL 中的单个查询更新多条记录(引擎:MyISAM)。

看起来像:

UPDATE table_name SET delete_flag=true WHERE column_1={value}

我想将所有 delete_flag 设置为 true。 然后,我想出了像这样添加 WHERE 子句:

UPDATE table_name SET delete_flag=true WHERE column_1={value} AND delete_flag=false

(delete_flag 没有任何索引。)

虽然这可能取决于记录的数量,但我想知道哪种方法更快。

你能给我你的建议吗? 如果视情况而定,请告诉我。

谢谢。

解决方法

据推测,id 在表中是唯一的,因此 MySQL 将根据该条件查找需要更新的行。

MySQL 然后在进行更新之前检查值是否更改。因此,当记录没有改变时,MySQL 引擎不会做额外的工作(例如日志记录)。

任何性能差异都可以忽略不计,而且很难量化。

,

如果您添加 INDEX(delete_flag,id),那么您的第二个选项会运行得更快,因为它会查看更少的行。