我正在尝试根据另一个表上的id更新表,但我遇到了一些性能问题。我在table_to_update上有150,000行,在table_to_get_data上有400,000行。
要更新的表格
+----+-----------------+
| id | field_to_update |
+----+-----------------+
| 1 | orange |
| 2 | apple |
| 3 | pear |
| 1 | orange |
+----+-----------------+
获取数据的表格
+----+-----------------+
| id | field |
+----+-----------------+
| 1 | orange |
| 2 | apple |
| 3 | pear |
+----+-----------------+
所以我尝试了3种不同的方式:
方法1:
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
答案 0 :(得分:0)
为从两个表加入的列创建索引。
它会为你创造奇迹。