您的位置:首页 > 数据库

【SQL改写】notexists-leftjoin(distinct)whereisnull改写_标量子查询

2017-11-28 22:37 513 查看
--原SQL 30min出不来结果  

select a.*  

from TeableA a  

where is_open = '1'  

and  ecd = 'xshg'  

and  not exists  

(select * from  bvaluation b  

     where a.calendar_date = b.tdate)   

and a.calendar_date >= '2011-09-06'  

and a.calendar_date < convert( date, getdate())  

   

--表信息查看  

select count(1)  

from TeableA a  

where is_open = '1'  

and  ecd = 'xshg'  

and a.calendar_date >= '2011-09-06'  

and a.calendar_date < convert( date, getdate())  

--1357  

select count(1) from  bvaluation b  

--8262721  

   

--改写SQL1  

select  

  a.*  

from TeableA a left join tdate b on (a.calendar_date = b.tdate)  

where  

  a.is_open = '1' and  

  a.ecd = 'xshg' and  

  a.calendar_date >= '2011-09-06' and  

  a.calendar_date < convert( date,getdate()) and  

  b.tdate is null  

--发现a.calendar_date: b.tdate=1:N ,join后会导致a表的重复,查询反馈很快,但是因为重复result set跑完耗时还是较长。  

--sp_helpindex bvaluation  

--bvaluation$BPK_AK_Key    nonclustered, unique, unique key located on DATA    SID, TSYMBOL, tdate, YEART_MAT  

--唯一约束中包含tdate  

   

--改写SQL2(Final)  

select  

  a.*  

from TeableA a left join (select distinct tdate from bvaluation)  

 b on (a.calendar_date = b.tdate)  

where  

  a.is_open = '1' and  

  a.ecd = 'xshg' and  

  a.calendar_date >= '2011-09-06' and  

  a.calendar_date < convert( date,getdate()) and  

  b.tdate is null  

--1s之内出结果  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: