MySQL RDS存储过程更新查询很慢

时间:2017-03-24 17:18:02

标签: mysql stored-procedures amazon-rds

我在存储过程中有一个更新查询,它根据TABLE2中的ID更新TABLE1。这是使用子查询编写的,如下所示。

update TABLE1 A
set status = 'ABC'
where A.ID in (
        select ID
        from TABLE2 B
        where B.SE_ID = V_ID
            and B.LOAD_DT = V_DT
        );

我已经使用

重写了这个
  • 一个JOIN

  • 屏蔽主查询中的子查询

  • 使用临时表并加入。

独立更新速度更快。

但是将它放在存储过程中非常慢。 需要使用来自TABLE2的2000 ID中的2000条记录更新TABLE1。

有人请帮忙。

1 个答案:

答案 0 :(得分:1)

避免使用子查询代替连接。 MySQL优化了子查询的使用非常差。也就是说,它可以运行子查询达2000次。

使用联接:

locals

您需要创建一个索引来优化它。

UPDATE TABLE1 A
INNER JOIN TABLE2 B
  ON A.ID = B.ID
SET A.status = 'ABC'
WHERE B.SE_ID = V_ID
  AND B.LOAD_DT = V_DT;

如果我的假设是正确的,其ID列是其主键,则无需在TABLE1上创建索引。这本身就是一个指数。