假设我有一个包含两列A和B的表,A列上有索引而B列上没有。
我想发出数百万个类似以下查询的请求:
UPDATE t1 SET b=b1 WHERE a=a1;
UPDATE t1 SET b=b2 WHERE a=a2;
....
每个唯一值的a
对应着1到100,000行数据。平均而言,每个唯一值有大约100行数据。
对于每个更新语句,平均有60%的行不会被更改,因为这些行中的b
已经具有所需的值。在30%的更新中,没有匹配的行将被更改。
使用这样的语句有意义吗?
UPDATE t1 SET b=b1 WHERE a=a1 AND b<>b1;
通过消除不必要的写回磁盘,它是否能加快进程速度?或者Mysql 5是否足够聪明,能够识别到没有任何更改,因此无需写回磁盘?