MySQL基于ID更新慢(15万条记录)

标签 mysql sql database query-performance

我正在尝试根据另一个表上的 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/

相关文章:

php - YOURLS 插件过滤特定 MySQL 列的 API 调用

mysql - 仅使用实体关系图查询 MYSQL 格式 [脑力挑战]

mysql - 在 mysql 中连接结果值

php - 通过php将图像上传到mysql数据库

mysql - SQL 选择大小写为

c# - 您可以直接使用 "CALL Proc_name()"作为字符串,或者在 C# 中使用 CommandType.StoredProcedure

mysql - SQL查询日期内销售的产品数量?

sql - Oracle JDBC 诊断与 JBoss EAP 6.1

php - 选择SQL查询从多个表中获取数据并在一张表中查看

SQL Server : update new record on insert