mysql UPDATE,性能WHERE check vs no check

时间:2016-12-08 15:25:54

标签: php mysql performance

我有一个非常长的表,有10000行。 9500行的列设置为1,其余500列的列设置为0。 我想更新表,以便所有行都将该列设置为1。

使用WHERE column = 0会更快吗?或者跳过WHERE并更新所有更好? 我正在使用准备好的声明。

  • 感谢

2 个答案:

答案 0 :(得分:4)

这是一个有趣的问题。一般来说,我会说where column = 0更好。它应该永远不会变得更糟,但在MySQL中它可能没有什么区别。

如果列上没有索引,则查询将需要读取所有行,以便识别需要更新的行。因此,无论如何,查询都将进行全表扫描。即使使用索引,优化器仍可选择全表扫描,除非您在column上有聚簇索引。

然后,进行更新的开销是维护日志。我很确定MySQL只会记录对数据库的实际更改。换句话说,无论如何它正在进行比较。因此,MySQL不会将值“重新更新”为相同的值。注意:并非所有数据库都以这种方式运行。

所有这一切,如果这是你的意图,我总是把where column = 0。 10,000行,性能不是大问题。在我看来,代码的清晰度排名更高。另外,我为多个数据库编写代码,所以我更喜欢编写能够在所有数据库中都运行良好的代码。

答案 1 :(得分:0)

通过我的脚本执行时间测量,对于MariaDB,它与查询的结果几乎相同(我的意思是结果和时间)。

我也会在MySQL上尝试。