我有一张表,其中包含有关游戏中城市的信息,您每回合可以 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/