在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'
各表数据量如下:
表名 记录数
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
整个sql执行过程中由于不是最优关联顺序,导致产生中间结果集50多G,虽然单条执行速度可接受,但是在并发是该sql产生的中间结果集是不可接受的(几百G接近上T),整个过程全是磁盘的读写等待。