GBase南大通用8a多表关联时执行计划有时不能按照最优关联顺序进行关联

描述:

GBase南大通用8a如下 7 张表关联的 sql
Select … from c_mp cm,
arc_e_mp_para_snap am,
arc_e_consprc_snap aep,
arc_e_cons_prc_amt aecp,
arc_e_mp_pq acmpq,
e_cat_prc ecp,
e_cat_prc_det ecpd
where cm.mp_id = am.mp_id
and cm.org_no = am.org_no
and am.calc_id = aep.calc_id
and am.prc_id = aep.prc_id
and am.org_no = aep.org_no
and aecp.prc_snap_id = aep.prc_snap_id
and aecp.org_no = aep.org_no
and ecp.prc_code = aecp.prc_code
and ecp.para_vn = aecp.para_vn
and acmpq.mp_para_snap_id = am.mp_para_snap_id and acmpq.org_no = am.org_no
and ecp.cat_prc_id = ecpd.cat_prc_id
and ecp.org_no = ecpd.org_no
and acmpq.prc_ts_code = ecpd.prc_ti_code
and am.org_no = ‘2140400’

GBase南大通用8a各表数据量如下:
表名 记录数
c_mp 20272978
arc_e_mp_para_snap 555244914 arc_e_consprc_snap 555759300

arc_e_cons_prc_amt 555517631 arc_e_mp_pq 573320532 e_cat_prc 3222
e_cat_prc_det 9282

GBase南大通用8a整个 sql 执行过程中由于不是最优关联顺序,导致产生中间结果集 50 多 G,虽然单条执行速 度可接受,但是在并发是该 sql 产生的中间结果集是不可接受的(几百 G 接近上 T),整个 过程全是磁盘的读写等待。

GBase南大通用8a解决办法:
分析出表的最优关联顺序,进行了强制改写后,单条 sql 产生的结果集不到 1G,执行时间能 缩短,且能顺利完成并发。改写如下:

Select … from (select ecp.cat_prc_id, ecpd.prc_ti_code,

t2.mp_para_snap_id,

t2.org_no
from (select aecp.prc_code,

aecp.para_vn, t1.mp_para_snap_id, t1.org_no

from (select aep.prc_snap_id, am.mp_para_snap_id,

am.org_no
from arc_e_mp_para_snap am, – 5 亿的表,但可有效过滤

arc_e_consprc_snap aep, – 5 亿的表

c_mp cm – 200 万 where am.calc_id = aep.calc_id

and am.prc_id = aep.prc_id and am.org_no = aep.org_no and am.org_no = ‘2140400’ and am.ym = ‘201301’

and cm.mp_id = am.mp_id

and cm.org_no = am.org_no) t1, --首先三表关联生成 T1 arc_e_cons_prc_amt aecp

where aecp.prc_snap_id = t1.prc_snap_id
and aecp.org_no = t1.org_no) t2, – T1 是小表,和大表关联生成 T2

e_cat_prc ecp,

e_cat_prc_det ecpd
where ecp.prc_code = t2.prc_codeGBase南大通用8aGBase南大通用8aGBase南大通用8aGBase南大通用8a

and ecp.para_vn = t2.para_vn
and ecp.cat_prc_id = ecpd.cat_prc_id) t3, – t2 和两个小表关联,生成 T3

arc_e_mp_pq acmpq – 使 T3 和 5 亿的表关联 where acmpq.prc_ts_code = t3.prc_ti_code

and acmpq.mp_para_snap_id = t3.mp_para_snap_id

and acmpq.org_no = t3.org_no;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值