优化此MySQL查询,删除另一个表

时间:2017-11-03 17:03:40

标签: mysql sql query-optimization

我有两个表,一个"导入"和另一个"当前"。 每小时数据都导入到Import中,我有一个程序必须确保在指定的日期间隔内使用Import中的新数据更新Current。

如果在该日期间隔期间导入中缺少行,则表示它们已被删除,因此也应从Current中删除它们。以下是此查询的来源:

delete from Current where CurrentId in
(
select CurrentId as id from (
select CurrentId from Current dd
where not exists 
(
    select d.* from Current d, Import tc
    where d.date between @startdate and @enddate
    and d.employeenumber = tc.employeenumber
    and d.date = tc.date
    and d.origin = tc.origin
    and d.planid = tc.planid
    and d.CurrentId = dd.CurrentId 
)
and dd.date between @startdate and @enddate
) as x
);

所以基本上在内部循环中,它选择两个表中相同的行。 然后它从Curret&#34中做出选择;哪里不存在"那些行找到需要删除的行。然后它获取ID并删除它们。

但是,由于我拥有的数据量需要一个小时,而且时间太长......我怎样才能加快速度?

1 个答案:

答案 0 :(得分:1)

您一次又一次地从current中选择,我认为没有理由这样做。如果您要从current中删除import中没有相关记录的import,那么您需要做的就是查找delete from current c where c.date between @startdate and @enddate and not exists ( select * from import i where i.employeenumber = c.employeenumber and i.date = c.date and i.origin = c.origin and i.planid = c.planid ); ,如果我没有弄错的话。

import(date, employeenumber, origin, planid)

为了快速实现这一点,您可能需要current(date)上的索引。当然是<h6>Q1</h6> <h6>Q2</h6> <h6>Q3</h6>