基于ID的MySQL更新缓慢(150000条记录)
我正在尝试根据另一个表上的id更新一个表,但出现了一些性能问题。我在表上有150000行要更新,在表上有400000行要获取数据 要更新的表基于ID的MySQL更新缓慢(150000条记录),mysql,sql,database,query-performance,Mysql,Sql,Database,Query Performance,我正在尝试根据另一个表上的id更新一个表,但出现了一些性能问题。我在表上有150000行要更新,在表上有400000行要获取数据 要更新的表 +----+-----------------+ |id |字段_至_更新| +----+-----------------+ |1 |橙色| |2 |苹果| |3 |梨| |1 |橙色| +----+-----------------+ 表来获取数据 +----+-----------------+ |id |字段| +----+---------
+----+-----------------+
|id |字段_至_更新|
+----+-----------------+
|1 |橙色|
|2 |苹果|
|3 |梨|
|1 |橙色|
+----+-----------------+
表来获取数据
+----+-----------------+
|id |字段|
+----+-----------------+
|1 |橙色|
|2 |苹果|
|3 |梨|
+----+-----------------+
所以我尝试了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
以查看查询将如何执行。显示您的创建表查询,并在每三个sql方法之前运行EXPLAIN。向我们显示查询的解释谢谢,可以找到解释表我没有添加任何索引,但根据,索引非常适合搜索,但是更新可能需要更多的时间。我不同意这一点。添加索引并自己尝试。如果没有帮助,您可以随时删除索引。当然,我们会尝试一下。谢谢。噢,哇,添加索引使12小时的查询时间缩短到了10秒!谢谢“索引非常适合搜索”--您正在表中搜索以获取数据。“但是要花更多的时间来更新”——这比另一个重要得多。