欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

求下部sql语句优化

更新时间: 2014-01-05 02:11:18 责任编辑: Author_N1

 

求下面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;

--参考方法--
--飞一般的感觉
SELECT a.Companyid Bmdm1, COUNT(DISTINCT a.Claimno) Pretidiao
  FROM v_Claiminfo2010 a, Claimcoordinateres b
 WHERE a.Claimno = b.Claimno
   AND a.Endoroverdate >= DATE
 '2010-01-01'
   AND a.Endoroverdate <
       To_Date('2010-12-31 00:00:01', 'yyyy-mm-dd hh:mi:ss')
   AND a.Ispreresearch = '1'
   AND b.TYPE = 2
   AND a.Status = '5'

--参考方法--
还有在你的claimCoordinateRes 表中的claimno列上建立一个索引
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:11:18
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/6749/
本文WWW.DOC100.NET DOC100.NET版权所有。