问题描述
我正在尝试使用 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)
,那么您的第二个选项会运行得更快,因为它会查看更少的行。