求下面SQL语句优化。
select companyid bmdm1,count(distinct claimno) pretidiao from v_claimInfo2010
where isPreResearch='1'
and claimno not in (select claimno from claimCoordinateRes where type= '2' )
and (status='5') and 1=1
and (trunc(endorOverDate,'DD') >= to_date('2010-01-01','YYYY-MM-DD') and trunc(endorOverDate,'DD') <=to_date('2010-12-31','YYYY-MM-DD'))
group by companyid
order by companyid
初步分析是not in影响效率,据说写成EXISTS会提高效率,如何写呢?
[解决办法]
select companyid bmdm1,count(distinct claimno) pretidiao
from v_claimInfo2010
where isPreResearch='1'
and (status='5')
and (trunc(endorOverDate,'DD') between to_date('2010-01-01','YYYY-MM-DD') and to_date('2010-12-31','YYYY-MM-DD'))
and not exists (select 1 from claimCoordinateRes where type='2' and claimCoordinateRes.claimno=v_claimInfo2010.claimno)
group by companyid
order by companyid;