我正在尝试更新一个包含大约18000条记录的表,但是我遇到了性能问题。
表名:emp
列名:
id VARCHAR(10),
status CHAR(1),
division VARCHAR(3)
表2名称:emp2
id VARCHAR(10),
status CHAR(1),
division VARCHAR(3),
code VARCHAR(3)
所以,我正在触发以下更新查询:
UPDATE emp
set status = 'X'
where status = 'Y'
and id NOT IN
(
SELECT id from emp2 where id like 'e%'
and division IN
(
SELECT DISTINCT division from emp2 where code in ('ABC','XYZ')
)
);
查询似乎很好但是会产生很多性能问题。我用Google搜索了解可以使用inner join
代替IN
而left join
代替NOT IN
。
但我发现很难在查询中加入这些内容。所以,我想知道是否有替代此更新查询。
感谢任何帮助。谢谢。
答案 0 :(得分:0)
可能类似于以下内容,但请确保在运行更新之前在SELECT中使用相同的查询,以便进行检查。
UPDATE emp
set status = 'X'
FROM EMP E
LEFT JOIN emp2 E2 on E2.id = E.ID AND E2.id like 'e%' AND E2.division in (SELECT DISTINCT division from emp2 where code in ('ABC','XYZ'))
where E2.id IS NULL
AND E.status = 'Y'
抽查
select E.id, E.status, 'X' AS ToStatus
FROM EMP E
LEFT JOIN emp2 E2 on E2.id = E.ID AND E2.id like 'e%' AND E2.division in (SELECT DISTINCT division from emp2 where code in ('ABC','XYZ'))
where E2.id IS NULL
AND E.status = 'Y'