2016-10-05 115 views
0

a和c都是具有400条记录的同一个表。 b和d与300个记录也是同一张表。然而需要大约4分钟来运行这个。我如何加快速度?SQL运行时间太长

select a.docref 
from a 
left outer b 
on a.cono=b.cono and a.tt=b.tt and a.docref=b.docref 
where a.cono='VC' 
and b.accn08='9005100' 
and a.pstper=11609 
and a.cbpref not in (select c.cbpref 
         from c 
         left outer join d 
         on c.cono=d.cono and c.tt=d.tt and c.docref=d.docref 
         where c.cono='VC' 
         and d.accn08='9005100' 
         and c.pstper=11609 
         and c.tt='RX') 

回答

0

语法NOT IN需要多一点时间。尝试LEFT JOIN并添加一个条件,其中​​:

SEELCT a.docref 
FROM a 
LEFT OUTER JOIN b 
ON a.cono=b.cono 
AND a.tt=b.tt 
AND a.docref=b.docref 
LEFT OUTER JOIN 
(
    SELECT c.cbpref 
    FROM c 
    LEFT OUTER JOIN d 
    ON c.cono=d.cono AND c.tt=d.tt AND c.docref=d.docref 
    WHERE c.cono='VC' 
    AND d.accn08='9005100' 
    AND c.pstper=11609 
    AND c.tt='RX' 
)tb 
ON tb.cbpref = a.cbpref 
AND a.cbpref IS NULL 
WHERE a.cono='VC' 
AND b.accn08='9005100' 
AND a.pstper=11609