语句:
select count(*)
from (select a.ChangeReasonCode,
b.ListedCoID,
b.ChangeDate,
a.TotNumShares,
b.before_ChangeDate,
c.TotNumShares before_TotNumShares
from input.TBL_CHN_I_SH_CapStruct a,
(select d.ListedCoID,
d.ChangeDate,
max(a.ChangeDate) before_ChangeDate
from input.TBL_CHN_I_SH_CapStruct a,
(select ListedCoID, ChangeDate
from input.TBL_CHN_I_SH_CapStruct
where ChangeReasonCode between 'P0751' and 'P0799'
and ChangeReasonCode not in
('P0755', 'P0759', 'P0799')
and updatestate <> 2) d
where a.ListedCoID = d.ListedCoID
and a.ChangeDate < d.ChangeDate
and a.updatestate <> 2
group by d.ListedCoID, d.ChangeDate) b,
input.TBL_CHN_I_SH_CapStruct c) t
在调优化语句时,应注意顺序, 先看SQL意思,然后再去查执行计划,分析性能差的语句。 在这里这个语句可以一眼看出, A, B , C这三个表没有联接条件,肯定会造成笛卡尔集。 因此只需要去改动SQL便可以优化语句性能。
select count(*)
from (select a.ChangeReasonCode,
b.ListedCoID,
b.ChangeDate,
a.TotNumShares,
b.before_ChangeDate,
c.TotNumShares before_TotNumShares
from input.TBL_CHN_I_SH_CapStruct a,
(select d.ListedCoID,
d.ChangeDate,
max(a.ChangeDate) before_ChangeDate
from input.TBL_CHN_I_SH_CapStruct a,
(select ListedCoID, ChangeDate
from input.TBL_CHN_I_SH_CapStruct
where ChangeReasonCode between 'P0751' and 'P0799'
and ChangeReasonCode not in
('P0755', 'P0759', 'P0799')
and updatestate <> 2) d
where a.ListedCoID = d.ListedCoID
and a.ChangeDate < d.ChangeDate
and a.updatestate <> 2
group by d.ListedCoID, d.ChangeDate) b,
input.TBL_CHN_I_SH_CapStruct c) t
在调优化语句时,应注意顺序, 先看SQL意思,然后再去查执行计划,分析性能差的语句。 在这里这个语句可以一眼看出, A, B , C这三个表没有联接条件,肯定会造成笛卡尔集。 因此只需要去改动SQL便可以优化语句性能。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22740983/viewspace-734642/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22740983/viewspace-734642/