我正在编写一个简单的更新查询来更新近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
);
这是我的解释计划
修改计划
请告诉我,随着数据的日益增长,我如何优化我的更新查询,除了制作大量的更新数据并进行更新之外,我还没有发现任何麻烦
答案 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'
这也可以写成:
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
可以大大改善查询。但是正如我所说,我们没有任何信息可以建议这种改进。