我在存储过程中有一个更新查询,它根据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。
有人请帮忙。
答案 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上创建索引。这本身就是一个指数。