Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于ID的MySQL更新缓慢(150000条记录)_Mysql_Sql_Database_Query Performance - Fatal编程技术网

基于ID的MySQL更新缓慢(150000条记录)

基于ID的MySQL更新缓慢(150000条记录),mysql,sql,database,query-performance,Mysql,Sql,Database,Query Performance,我正在尝试根据另一个表上的id更新一个表,但出现了一些性能问题。我在表上有150000行要更新,在表上有400000行要获取数据 要更新的表 +----+-----------------+ |id |字段_至_更新| +----+-----------------+ |1 |橙色| |2 |苹果| |3 |梨| |1 |橙色| +----+-----------------+ 表来获取数据 +----+-----------------+ |id |字段| +----+---------

我正在尝试根据另一个表上的id更新一个表,但出现了一些性能问题。我在表上有150000行要更新,在表上有400000行要获取数据

要更新的表

+----+-----------------+
|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秒!谢谢“索引非常适合搜索”--您正在
表中搜索以获取数据。“但是要花更多的时间来更新”——这比另一个重要得多。