使用它的当前值更新索引列有什么影响?

时间:2014-03-06 06:14:57

标签: mysql sql

如果我有一个带有索引列的表,则将status声明为int。以下查询会产生什么样的影响或性能影响?

UPDATE my_table set status = "1" WHERE status = 1
UPDATE my_table set status = 1 where status = 1

除了好奇之外,我问的原因是我有一个ORM,它会在调用更新时更新表中的每一行。我想知道是否有任何性能影响。我认为无关的写入会减慢查询速度并且可能不得不更新索引,但我只是在猜测。

1 个答案:

答案 0 :(得分:3)

两种情况都不会影响。 MySQL将根据相应的条件搜索匹配的行,但也会意识到不应该做任何事情。类型转换是不可能的,因为比较之前完成。因此,受影响的行数将为0.您的结果完全符合预期(样本):

Query OK, 0 rows affected (0.01 sec)
Rows matched: 1  Changed: 0  Warnings: 0

对于这两种情况和受影响的行:

mysql> SELECT ROW_COUNT();
+-------------+
| ROW_COUNT() |
+-------------+
|           0 |
+-------------+
1 row in set (0.02 sec)

这意味着MySQL既不会对价值也不会对索引做任何事情。