mysql - 盲目更新还是在哪里更新?

标签 mysql optimization sql-update

我有一张表,其中包含有关游戏中城市的信息,您每回合可以 build 一座建筑物,并且记录值为“usedBuilding”。

每一轮我都会运行一个脚本,将 usedBuilding 更改为 0,问题是,以下两种方式中哪一种更快,使用哪种方式实际上重要吗?

UPDATE cities SET usedBuilding = 0;
UPDATE cities SET usedBuilding = 0 WHERE usedBuilding = 1;

最佳答案

一般来说,第二种情况(使用 WHERE)子句会更快 - 因为它不会在未使用的行上导致触发器评估、事务日志记录、索引更新等。

可能 - 根据 0/1 值的分布,更新所有行而不是进行比较实际上可能更快 - 但这是一个相当退化的情况。

由于大约 95% 的查询成本是 I/O,使用 WHERE 子句要么没有任何区别(因为该列没有索引,并且您正在执行表扫描)要么有很大的不同(如果列索引,或表分区等)。无论哪种方式,都不会造成伤害。

我怀疑对于您所谈论的数据量,您不会注意到执行计划或速度上的差异 - 这使它充其量只是学术性的,最坏的情况下是过早的优化。因此,我建议您选择逻辑上对您的应用有意义的任何内容。

关于mysql - 盲目更新还是在哪里更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/124314/

相关文章:

mysql - 使用 ORDER BY 和 LIMIT MYSQL 更新多个不同的表

php - 为什么 UPDATE 会创建新记录?

mysql - 如何在 LAMP 上的 MySQL 中用用户定义的列表覆盖 "Full-Text Stopwords"的内置停用词列表?

python - 打印 MySQLdb 运行的实际查询?

mysql - 我应该选择哪个数据库?

javascript - 我的 PHP 文件的 AJAX POST 请求遇到了一些问题

sql - Postgres pg_trgm GIN 索引在特定连接中被忽略

ios - 带有完成 block 的 NSOperation

r - 优化 - 将目标和梯度函数参数作为列表传递

mysql - 带有 from 子句的 sql update 语句进行验证?