注册

sql内联和左外联执行效率差

皮特 2024/06/24 438 8

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM9
【操作系统】:CENTOS7
【CPU】: INTEL
【问题描述】*:
如下sql执行效率差, 在oracle中执行很快

SELECT m.s_company_code AS companyCode, d.n_period_code AS period, m.s_contents_code AS contentsCode, sum(NVL(d.N_TOTAL_VALUE_OPEN, 0)) AS totalValueOpen, sum(NVL(d.n_total_value_close, 0)) AS totalValueClose FROM AM_MASTER_DATA m LEFT JOIN AM_DEPRECIATION D ON m.S_COMPANY_CODE = d.S_COMPANY_CODE AND d.N_PERIOD_CODE IN ( 202301,202302 ) AND d.S_ASSETS_CODE = m.S_ASSETS_CODE WHERE m.s_company_code IN ( '2BJ1101030' , '2BJ1102030' , '2BJ1506070' ) AND ( m.S_CONTENTS_CODE LIKE '010301' || '%' ) AND d.S_ID IS NOT NULL GROUP BY m.s_company_code, d.n_period_code, m.s_contents_code

查看执行计划如下:

1 #NSET2: [1, 1, 378] 2 #PRJT2: [1, 1, 378]; exp_num(5), is_atom(FALSE) 3 #HAGR2: [1, 1, 378]; grp_num(3), sfun_num(2), distinct_flag[0,0]; slave_empty(0) keys(DMTEMPVIEW_889372821.TMPCOL0, DMTEMPVIEW_889372821.TMPCOL1, DMTEMPVIEW_889372821.TMPCOL2) 4 #PRJT2: [1, 22, 378]; exp_num(5), is_atom(FALSE) 5 #SLCT2: [1, 22, 378]; (D.N_PERIOD_CODE IN LIST AND D.S_COMPANY_CODE IN LIST) 6 #HASH2 INNER JOIN: [1, 22, 378]; KEY_NUM(2); KEY(M.S_COMPANY_CODE=D.S_COMPANY_CODE AND M.S_ASSETS_CODE=D.S_ASSETS_CODE) KEY_NULL_EQU(0, 0) 7 #SLCT2: [1, 22, 378]; D.S_ASSETS_CODE = M.S_ASSETS_CODE 8 #NEST LOOP INDEX JOIN2: [1, 22, 378] 9 #ACTRL: [1, 22, 378]; 10 #NEST LOOP INDEX JOIN2: [1, 11, 144] 11 #CONST VALUE LIST: [1, 3, 48]; row_num(3), col_num(1) 12 #BLKUP2: [1, 3, 144]; AM_MASTER_DATA_S_COMPANY_CODE_IDX(M) 13 #SSEK2: [1, 3, 144]; scan_type(ASC), AM_MASTER_DATA_S_COMPANY_CODE_IDX(AM_MASTER_DATA as M), scan_range[(DMTEMPVIEW_889372823.colname,'010301'),(DMTEMPVIEW_889372823.colname,'010302')) 14 #BLKUP2: [1, 2, 126]; INDEX33627091(D) 15 #SLCT2: [1, 2, 126]; (D.N_PERIOD_CODE IN LIST AND D.S_COMPANY_CODE IN LIST) 16 #SSEK2: [1, 2, 126]; scan_type(ASC), INDEX33627091(AM_DEPRECIATION as D), scan_range[(M.S_COMPANY_CODE,min,min),(M.S_COMPANY_CODE,max,max)) 17 #CSCN2: [778, 5095517, 234]; INDEX33627003(AM_DEPRECIATION as D); btr_scan(1)

我发现第17行描述的计划中, 对AM_DEPRECIATION表做了全表扫描,且成本很高, 不知道为啥要在left join后又进行了高成本的hash join,
请问如何优化?

我还发现inner join的执行效率都很差. 有什么系统参数需要调整吗? 请给出建议!,万分感谢

回答 0
暂无回答
扫一扫
联系客服