我有两个表,一个"导入"和另一个"当前"。 每小时数据都导入到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并删除它们。
但是,由于我拥有的数据量需要一个小时,而且时间太长......我怎样才能加快速度?
答案 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>
。