如果我有一个带有索引列的表,则将status
声明为int。以下查询会产生什么样的影响或性能影响?
UPDATE my_table set status = "1" WHERE status = 1
UPDATE my_table set status = 1 where status = 1
除了好奇之外,我问的原因是我有一个ORM,它会在调用更新时更新表中的每一行。我想知道是否有任何性能影响。我认为无关的写入会减慢查询速度并且可能不得不更新索引,但我只是在猜测。
答案 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既不会对价值也不会对索引做任何事情。