如何优化UPDATE语句?

时间:2011-06-29 02:25:32

标签: mysql sql optimization sql-update

我有一张包含近百万条记录的表格和另一张包含几百条记录的表格。我想用小表中的值更新大表,其中包含以下

UPDATE tableA ta, tableB tb
SET price=tb.price
WHERE ta.id=tb.id

使用上面的SQL语句,查询需要很长时间(超过1小时)。有没有一种方法可以让我更快地完成这项操作?

这是两个表的架构。

表A

id         name   descrip   region   price
0          a      abc       def      1.7
1          b      abc       def      2.2
3          c      abc       def      3.4
4          d      abc       def      5.3
....       .      ...       ...      ...
999999     e      abc       def      4.5
1000000    f      abc       def      7.9

表B

id      price
0       0.7
1       2.5
3       1.9
4       7.9

结果 表A

表A

id         name   descrip   region   price
0          a      abc       def      0.7
1          b      abc       def      2.5
3          c      abc       def      1.9
4          d      abc       def      7.9
....       .      ...       ...      ...
999999     e      abc       def      4.5
1000000    f      abc       def      7.9

1 个答案:

答案 0 :(得分:2)

如果您的tableB有索引,涵盖id(显然是这样) - 那么您没有其他方法可以加快速度。因为这里最慢的是物理上的价值变化。

您可以将where更改为:

WHERE ta.id=tb.id and ta.price <> tb.price

避免将价格更新为相同值