我有一个源表和一个相同的目标表,其中我们有每个客户每天的费率,我们有48个时期 对于每一天,我们每天有48行。
tblSource
SD UpdateDate CustId Period Rate
01/01/2013 01/01/2013 14:30:29 1245 1 2.3
01/01/2013 01/01/2013 14:32:29 1245 2 4.3
01/01/2013 01/01/2013 14:34:29 1245 3 2.1
.....
01/01/2013 01/01/2013 14:34:29 1245 48 2.1
tblTarget
SD UpdateDate CustId Period Rate
01/01/2013 01/01/2013 14:30:29 1245 1 2.3
01/01/2013 01/01/2013 14:32:29 1245 2 4.3
01/01/2013 01/01/2013 14:34:29 1245 3 2.1
.....
01/01/2013 01/01/2013 14:34:29 1245 48 2.1
我正在编写一个脚本,它将比较两个表并将源表上存在但不存在于目标表中的任何行插入到目标表中。
以下是我的查询工作正常,但我的问题是源表和目标表都有超过4百万行因此进程耗时太长,我们在目标上有索引SD,CustId和Period列上的源表和源表。
是否有任何其他方式来编写此查询或对其进行优化,以便我们提高速度。
SELECT s.SD, s.UpdateDate, s.CustId, s.Period, s.Rate
FROM tblScource s
LEFT JOIN tblTarget t ON t.sd = s.SD AND s.CustId = t.CustId AND s.Period = t.Rate
WHERE t.SD IS NULL and t.custId IS NULL
由于
答案 0 :(得分:0)
SELECT s.SD, s.UpdateDate, s.CustId, s.Period, s.Rate
FROM tblScource s
WHERE NOT EXISTS
(
SELECT 1
FROM tblTarget t
WHERE t.sd = s.SD
AND s.CustId = t.CustId
AND s.Period = t.Rate
AND t.SD IS NULL
AND t.custId IS NULL
)
;
答案 1 :(得分:0)
create table as SELECT s.SD, s.UpdateDate, s.CustId, s.Period, s.Rate
FROM tblScource s
LEFT JOIN tblTarget t ON t.sd = s.SD AND s.CustId = t.CustId AND s.Period = t.Rate
WHERE t.SD IS NULL and t.custId IS NULL;
如果问题可能在目标表上没有花费太多时间,请尝试在合并之前删除目标表上的索引,然后再重新创建它。