【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之内出结果
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之内出结果
相关文章推荐
- 【SQL改写】notexists-leftjoin(distinct)whereisnull改写
- Linq to Sql 总生成 where ID is null 的解决办法
- 改写优化SQL(6):尽量少用标量子查询
- SQL ISNULL应用
- Sql ISNULL() 函数
- SQL ISNULL 函数
- SQL null & is null & is not null
- sqlserver isnull在数据库查询中的应用
- Caused by: java.sql.SQLException: connection holder is null
- Sql ISNULL() 函数
- java.sql.SQLException: null, message from server: “Host ‘xxx’ is not allowed to connect
- SQL ISNULL
- LINQ to SQL:Where、Select/Distinct
- 报错SQL state [null]; error code [17027]; 流已被关闭; nested exception is java.sql.SQLException: 流已被关闭
- druid数据库连接池问题:java.sql.SQLException: connection holder is null
- sql 语句 c.id is null 与 id = ''
- SQL isNull 小记
- oracle 性能优化操作六: 去掉Where子句中的IS NULL和IS NOT NULL
- 改写优化SQL(3):聚合标量子查询改为left join
- MySql数据库中sql的IS NOT NULL与!=NULL的区别