- 论坛徽章:
- 0
|
哦也!按以上思路,速度快了很多!
------------------------------只调整表的连接顺序,速度基本没什么提高--------------------------------------------------------------------------------------
QUERY:
------
insert into plcy_car_evt_mdt
select a.plcy_cd,a.rl_dt_id,
a.start_dt_id,a.org_cd,trim(a.prod_cd)||b.cvr_kind_cd,a.cust_grp,
a.clt_cd,a.chnl_tp_cd,a. plcy_seg_id,a.rnew_ind,b.cur_cd,a.ci_ind,
case when a.plcy_otflg[7]<>'N'
then b.plcy_prem else 0 end plcy_prem,
case when a.plcy_otflg[7]<>'N'
then b.nfee_prem else 0 end nfee_prem,
b.plcy_dsct_amt plcy_dsct_amt,
b.plcy_xy_amt plcy_xy_amt,
d.plcy_std_prem plcy_std_prem,
b.sign_std_prem sign_std_prem,
case when a.plcy_otflg[7]<>'N'
then b.plcy_amnt else 0 end plcy_amnt,
b.plcy_cnt,a.load_dt_id,a.upt_dt_id
from plcy_car_evt_dt b join plcy_car_cnt a on a.plcy_cd=b.plcy_cd
left join plcy_car_evt_ori_dt d on b.plcy_cd=d.plcy_cd
and b.cvr_kind_cd=d.cvr_kind_cd and b.cur_cd=d.cur_cd
where a.plcy_cd not in(
select i.plcy_cd from plcy_car_endr_tmp i where i.efct_dt_id<=a.start_dt_id)
Estimated Cost: 125926304
Estimated # of Rows Returned: 107742784
1) dm.b: SEQUENTIAL SCAN (Serial, fragments: ALL)
2) dm.a: INDEX PATH
Filters: dm.a.plcy_cd != ALL <subquery>
(1) Index Keys: plcy_cd (Serial, fragments: ALL)
Lower Index Filter: dm.a.plcy_cd = dm.b.plcy_cd
ON-Filters:dm.a.plcy_cd = dm.b.plcy_cd
NESTED LOOP JOIN
3) dm.d: INDEX PATH
(1) Index Keys: plcy_cd cvr_kind_cd cur_cd (Serial, fragments: ALL)
Lower Index Filter: ((dm.b.plcy_cd = dm.d.plcy_cd AND dm.b.cvr_kind_cd = dm.d.cvr_kind_cd ) AND dm.b.cur_cd = dm.d.cur_cd )
ON-Filters dm.b.plcy_cd = dm.d.plcy_cd AND dm.b.cvr_kind_cd = dm.d.cvr_kind_cd ) AND dm.b.cur_cd = dm.d.cur_cd )
NESTED LOOP JOIN(LEFT OUTER JOIN)
PostJoin-Filters:dm.a.plcy_cd != ALL <subquery>
Subquery:
---------
Estimated Cost: 4
Estimated # of Rows Returned: 11
1) dm.i: INDEX PATH
(1) Index Keys: efct_dt_id (Serial, fragments: ALL)
Upper Index Filter: dm.i.efct_dt_id <= dm.a.start_dt_id
---------------------------------------------------not in换成not exists后--------------------------------------------------------------
insert into plcy_car_evt_mdt
select a.plcy_cd,a.rl_dt_id,
a.start_dt_id,a.org_cd,trim(a.prod_cd)||b.cvr_kind_cd,a.cust_grp,
a.clt_cd,a.chnl_tp_cd,a. plcy_seg_id,a.rnew_ind,b.cur_cd,a.ci_ind,
case when a.plcy_otflg[7]<>'N'
then b.plcy_prem else 0 end plcy_prem,
case when a.plcy_otflg[7]<>'N'
then b.nfee_prem else 0 end nfee_prem,
b.plcy_dsct_amt plcy_dsct_amt,
b.plcy_xy_amt plcy_xy_amt,
d.plcy_std_prem plcy_std_prem,
b.sign_std_prem sign_std_prem,
case when a.plcy_otflg[7]<>'N'
then b.plcy_amnt else 0 end plcy_amnt,
b.plcy_cnt,a.load_dt_id,a.upt_dt_id
from plcy_car_evt_dt b join plcy_car_cnt a on a.plcy_cd=b.plcy_cd
left join plcy_car_evt_ori_dt d on b.plcy_cd=d.plcy_cd
and b.cvr_kind_cd=d.cvr_kind_cd and b.cur_cd=d.cur_cd
where not exists(
select * from plcy_car_endr_tmp i where i.plcy_cd=a.plcy_cd and i.efct_dt_id<=a.start_dt_id)
Estimated Cost: 63804204
Estimated # of Rows Returned: 54162628
1) dm.a: SEQUENTIAL SCAN (Serial, fragments: ALL)
Filters: NOT EXISTS <subquery>
2) dm.b: AUTOINDEX PATH
(1) Index Keys: plcy_cd (Serial, fragments: ALL)
Lower Index Filter: dm.a.plcy_cd = dm.b.plcy_cd
ON-Filters:dm.a.plcy_cd = dm.b.plcy_cd
NESTED LOOP JOIN
3) dm.d: INDEX PATH
(1) Index Keys: plcy_cd cvr_kind_cd cur_cd (Serial, fragments: ALL)
Lower Index Filter: ((dm.b.plcy_cd = dm.d.plcy_cd AND dm.b.cvr_kind_cd = dm.d.cvr_kind_cd ) AND dm.b.cur_cd = dm.d.cur_cd )
ON-Filters dm.b.plcy_cd = dm.d.plcy_cd AND dm.b.cvr_kind_cd = dm.d.cvr_kind_cd ) AND dm.b.cur_cd = dm.d.cur_cd )
NESTED LOOP JOIN(LEFT OUTER JOIN)
PostJoin-Filters:NOT EXISTS <subquery>
Subquery:
---------
Estimated Cost: 4
Estimated # of Rows Returned: 1
1) dm.i: INDEX PATH
Filters: dm.i.plcy_cd = dm.a.plcy_cd
(1) Index Keys: efct_dt_id (Serial, fragments: ALL)
Upper Index Filter: dm.i.efct_dt_id <= dm.a.start_dt_id |
|