如何在Mysql中优化简单更新查询?

时间:2019-05-10 06:01:11

标签: mysql database

我正在编写一个简单的更新查询来更新近3.3万条记录,但是该查询要执行近243秒的时间,这真是一个时间。

这是我的查询

UPDATE Central.stg_roll_header stg
    SET stg.is_updated = 'I'
    WHERE stg.id IN (
                        SELECT roll_header_temp.id 
                        FROM roll_header_temp
                    );

这是我的解释计划

修改计划

enter image description here

请告诉我,随着数据的日益增长,我如何优化我的更新查询,除了制作大量的更新数据并进行更新之外,我还没有发现任何麻烦

1 个答案:

答案 0 :(得分:4)

优化通常取决于以下方面的详细知识:1.数据库结构。 2.数据库中的数据。 3.目的是数据库中所有数据。 4.查询本身的目的。仅仅说它“简单”并不能给我们太多信息。

话虽如此,子查询通常不是一个好主意,在这种情况下,不需要它。一个“简单”的JOIN可以做到:

UPDATE Central.stg_roll_header AS stg
INNER JOIN roll_header_temp ON stg.id = roll_header_temp.id; 
SET stg.is_updated = 'I'

请参阅:MySQL UPDATE JOIN

这也可以写成:

UPDATE Central.stg_roll_header AS stg, roll_header_temp
SET stg.is_updated = 'I'
WHERE stg.id = roll_header_temp.id; 

现在,我无法测试。我什至不知道这些字段的含义,因此它可能根本无法改善任何情况,但是看起来更好。

通常可以通过将其他列包含在索引中来改进查询。例如,一个基于时间的。仅添加WHERE YEAR(roll_time) >= 2019可以大大改善查询。但是正如我所说,我们没有任何信息可以建议这种改进。