我正在尝试根据另一个表上的 ID 更新一个表,但遇到一些性能问题。我在 table_to_update 上有 150,000 行,在 table_to_get_data 上有 400,000 行。
要更新的表
+----+-----------------+
|编号 |更新字段 |
+----+-----------------+
| 1 |橙色|
| 2 |苹果|
| 3 |梨|
| 1 |橙色|
+----+-----------------+
获取数据的表
+----+-----------------+
|编号 |领域 |
+----+-----------------+
| 1 |橙色|
| 2 |苹果|
| 3 |梨|
+----+-----------------+
所以我尝试了 3 种不同的方法:
方法一:
UPDATE table_to_update t1, table_to_get_data t2
SET t1.field_to_update = t2.field
WHERE t1.id = t2.id
方法2:
UPDATE table_to_update
JOIN table_to_get_data
ON table_to_update.id = table_to_get_data.id
SET table_to_update.field_to_update = table_to_get_data.field
方法3:
UPDATE table_to_update
LEFT JOIN table_to_get_data
ON table_to_update.id = table_to_get_data.id
SET table_to_update.field_to_update = table_to_get_data.field
到目前为止,方法3似乎是最快的,但是,计算更新1000行所需的时间,我需要12个小时才能完成整个表的更新。有没有更有效的方法来更新表?
编辑: 添加了 EXPLAIN 表 EXPLAIN Table
最佳答案
在您从两个表连接的列上创建索引。
它会给你创造奇迹。
关于MySQL基于ID更新慢(15万条记录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36685514/