MySQL UPDATE =更新具有相同内容的字段是否有任何开销?

时间:2013-04-16 15:28:42

标签: mysql

我有一个应用程序需要每2秒间隔评估一堆“消息”..

每次运行此评估时,系统都会设计为SELECT当前行和列数据,对其执行某些操作然后将其更新回表中。该脚本的设置方式是它更新所有字段而不管实际的变化与否(为了更清晰的编码)..就像这样:

  • 从MESSAGES表中选择所有行

  • 全球化变量

  • 从MESSAGES_REMOTE表中选择所有行

  • 全局化变量//这有效地覆盖了现有的变量 第一个表中的变量

  • 将所有变量更新回MESSAGES表

现在,实际更新的列可能从1个变量到所有变量,具体取决于具体情况。

所以我想知道MYSQL在尝试更新具有相同值的列时是否会有相同的开销,或者是否有某种内部引擎来检查是否需要执行实际的更新/写入

2 个答案:

答案 0 :(得分:1)

这会回答你的问题吗?

 SELECT * FROM user;
 +---------+----------+
 | user_id | username |
 +---------+----------+
 |     101 | Adam     |
 |     102 | Ben      |
 |     103 | Charlie  |
 |     104 | Dave     |
 +---------+----------+
 4 rows in set (0.01 sec)

 UPDATE user SET username = 'Adam' WHERE user_id = 101;
 Query OK, 0 rows affected (0.18 sec)
 Rows matched: 1  Changed: 0  Warnings: 0

答案 1 :(得分:0)

虽然http://dev.mysql.com/doc/refman/5.6/en/update.html提及:

  

如果将列设置为当前值,则MySQL会注意到这一点并且不会更新它。

这并不意味着没有开销。

我在一个包含86列的表上做了一些基准测试,通过打开一个连接,然后在一行上执行1000 UPDATE。

在方案1中,所有86列都设置为相同的值。这需要557毫秒。

在方案2中,只有3列设置为相同的值。这花了290毫秒。

因此,IO读取和CPU肯定会有一些开销。