ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

达梦sql优化实践5

2021-11-01 16:02:17  阅读:219  来源: 互联网

标签:sql when LBPIEI LBFN CAPTIAL APPLY nvl 优化 达梦


Fgwzd项目sql语句优化
原sql如下:
–页脚统计
select /*+ ADAPTIVE_NPLN_FLAG(3) */
count(0) ,
nvl(sum(TOTAL_INVEST), 0),
nvl(sum(NUM), 0) ,
nvl(sum(INVEST_REQUIREMENTS), 0)
FROM
(
SELECT
LBFN.ID ,
LBFN.FILE_NO ,
LBFN.FILE_NAME ,
COUNT(LBPM.ID) AS NUM ,
SUM(NVL(LBPM.INVESTMENT_TOTAL, 0)) AS TOTAL_INVEST ,
LBFN.LOCKED ,
LBFN.STATUS ,
TO_CHAR(LBFN.SUBMIT_TIME, ‘YYYY-MM-DD HH24:MI:SS’) AS SUBMIT_TIME ,
LBFN.FILE_VERSION ,
LBFN.DEPARTMENT_GUID ,
SUM(case when LBPM.LOCAL_BOND =1 and to_char(LBPM.EXPECT_ENDYEAR, ‘yyyy-MM’) >= to_char(add_months(SYSDATE, 2), ‘yyyy-MM’) then 0 when LBPM.ID is null then 0 else CASE WHEN INSTR(SS.PARAM_VALUE, LBFN.FILE_NAME)>0 then 0 else 1 end end) AS BOND_CHECK,
SUM(case when regexp_like(LBPM.PRO_CODE_AREA, ‘[-]{4}-[-]{6}-[-]{2}-[-]{2}-[-]{6}$’)=1 or LBPM.ID IS NULL then 0 else 1 end) AS CODE_CHECK,
SUM(case when LBPM.LOCAL_BOND =1 and (LBPM.PROJECT_INCOME_SOURCE IS NULL OR LBPM.PROJECT_INCOME_SOURCE=’’
) then 1 else 0 end) AS SOURCE_CHECK ,
LBFN.YEAR ,
LBFN.SOURCE ,
LBFN.SYS_LOCK ,
LBFN.WRAPUP ,
sum(case when LBFN.year=2015 then nvl(LBPIEI.APPLY_CAPTIAL_2015, 0) when LBFN.year=2016 then nvl(LBPIEI.APPLY_CAPTIAL_2016, 0) when LBFN.year=2017 then nvl(LBPIEI.APPLY_CAPTIAL_2017, 0) when LBFN.year=2018 then nvl(LBPIEI.APPLY_CAPTIAL_2018, 0) when LBFN.year=2019 then nvl(LBPIEI.APPLY_CAPTIAL_2019, 0) when LBFN.year=2020 then nvl(LBPIEI.APPLY_CAPTIAL_2020, 0) when LBFN.year=2021 then nvl(LBPIEI.APPLY_CAPTIAL_2021, 0) when LBFN.year=2022 then nvl(LBPIEI.APPLY_CAPTIAL_2022, 0) when LBFN.year=2023 then nvl(LBPIEI.APPLY_CAPTIAL_2023, 0) when LBFN.year=2024 then nvl(LBPIEI.APPLY_CAPTIAL_2024, 0) when LBFN.year=2025 then nvl(LBPIEI.APPLY_CAPTIAL_2025, 0) when LBFN.year=2026 then nvl(LBPIEI.APPLY_CAPTIAL_2026, 0) when LBFN.year=2027 then nvl(LBPIEI.APPLY_CAPTIAL_2027, 0) when LBFN.year=2028 then nvl(LBPIEI.APPLY_CAPTIAL_2028, 0) when LBFN.year=2029 then nvl(LBPIEI.APPLY_CAPTIAL_2029, 0) when LBFN.year=2030 then nvl(LBPIEI.APPLY_CAPTIAL_2030, 0) end) as INVEST_REQUIREMENTS,
REPLACE(LBFN.DEPARTMENT_FULLNAME, ‘varchar1’, ‘’) AS DEPARTMENT_FULLNAME
FROM
table1 LBFN
LEFT JOIN
(
SELECT
LBP.ID ,
LBP.FILE_NO_ID ,
LBPIEM.LOCAL_BOND ,
LBPIEM.EXPECT_ENDYEAR ,
LBPIEM.PRO_CODE_AREA ,
LBPIEM.PROJECT_INCOME_SOURCE,
NVL(LBPIEM.INVESTMENT_TOTAL, 0) AS INVESTMENT_TOTAL
FROM
table2 LBP
JOIN table2_INFO_EXT_MASTER LBPIEM
ON
LBP.ID = LBPIEM.PROJECT_ID
WHERE
1=1
)
LBPM ON LBFN.ID = LBPM.FILE_NO_ID
LEFT JOIN
(
select
APPLY_CAPTIAL_2015,
APPLY_CAPTIAL_2016,
APPLY_CAPTIAL_2017,
APPLY_CAPTIAL_2018,
APPLY_CAPTIAL_2019,
APPLY_CAPTIAL_2020,
APPLY_CAPTIAL_2021,
APPLY_CAPTIAL_2022,
APPLY_CAPTIAL_2023,
APPLY_CAPTIAL_2024,
APPLY_CAPTIAL_2025,
PROJECT_ID ,
APPLY_CAPTIAL_2026,
APPLY_CAPTIAL_2027,
APPLY_CAPTIAL_2028,
APPLY_CAPTIAL_2029,
APPLY_CAPTIAL_2030
from
table2_INFO_EXT_INVEST
where
project_item_ext_id=‘A00069’
)
LBPIEI
ON
LBPM.ID = LBPIEI.PROJECT_ID
LEFT JOIN SYSTEM_SETTINGS SS
ON
SS.PARAM_NAME = ‘SYSTEM_LOCALBOND_ENDTIME_FLAG’
–WHERE
–LBFN.DEPARTMENT_GUID = ‘JIANGXI-1’
GROUP BY
LBFN.ID ,
LBFN.FILE_NO ,
LBFN.FILE_NAME ,
LBFN.LOCKED ,
LBFN.STATUS ,
TO_CHAR(LBFN.SUBMIT_TIME, ‘YYYY-MM-DD HH24:MI:SS’),
LBFN.FILE_VERSION ,
LBFN.DEPARTMENT_GUID ,
LBFN.YEAR ,
LBFN.SOURCE ,
LBFN.SYS_LOCK ,
REPLACE(LBFN.DEPARTMENT_FULLNAME, ‘varchar1’, ‘’) ,
LBFN.WRAPUP
);

其中加粗部分,表示与ss表进行笛卡尔积关联。
经过沟通,需要进行笛卡尔积关联的表是一个一对一配置的码表:
select ss.param_value from table4 SS where ss.PARAM_NAME = ‘SYSTEM_table2_ENDTIME_FLAG’;

优化方法如下:
消除对ss表的笛卡尔积关联,把语句拆开成两步用高级语言做,1、执行select ss.param_value from SYSTEM_SETTINGS SS where ss.PARAM_NAME = ‘SYSTEM_table2_ENDTIME_FLAG’; 2、把这个param_value作为常量传到sql的select字句里的加粗部分:
–页脚统计
select /*+ ADAPTIVE_NPLN_FLAG(3) /
count(0) ,
nvl(sum(TOTAL_INVEST), 0),
nvl(sum(NUM), 0) ,
nvl(sum(INVEST_REQUIREMENTS), 0)
FROM
(
SELECT
LBFN.ID ,
LBFN.FILE_NO ,
LBFN.FILE_NAME ,
COUNT(LBPM.ID) AS NUM ,
SUM(NVL(LBPM.INVESTMENT_TOTAL, 0)) AS TOTAL_INVEST ,
LBFN.LOCKED ,
LBFN.STATUS ,
TO_CHAR(LBFN.SUBMIT_TIME, ‘YYYY-MM-DD HH24:MI:SS’) AS SUBMIT_TIME ,
LBFN.FILE_VERSION ,
LBFN.DEPARTMENT_GUID ,
SUM(case when LBPM.LOCAL_BOND =1 and to_char(LBPM.EXPECT_ENDYEAR, ‘yyyy-MM’) >= to_char(add_months(SYSDATE, 2), ‘yyyy-MM’) then 0 when LBPM.ID is null then 0 else CASE WHEN INSTR(/SS.PARAM_VALUE/’PARAM_VALUE’, LBFN.FILE_NAME)>0 then 0 else 1 end end) AS BOND_CHECK,
SUM(case when regexp_like(LBPM.PRO_CODE_AREA, ‘[-]{4}-[-]{6}-[-]{2}-[-]{2}-[-]{6}$’)=1 or LBPM.ID IS NULL then 0 else 1 end) AS CODE_CHECK,
SUM(case when LBPM.LOCAL_BOND =1 and (LBPM.PROJECT_INCOME_SOURCE IS NULL OR LBPM.PROJECT_INCOME_SOURCE=’’
) then 1 else 0 end) AS SOURCE_CHECK ,
LBFN.YEAR ,
LBFN.SOURCE ,
LBFN.SYS_LOCK ,
LBFN.WRAPUP ,
sum(case when LBFN.year=2015 then nvl(LBPIEI.APPLY_CAPTIAL_2015, 0) when LBFN.year=2016 then nvl(LBPIEI.APPLY_CAPTIAL_2016, 0) when LBFN.year=2017 then nvl(LBPIEI.APPLY_CAPTIAL_2017, 0) when LBFN.year=2018 then nvl(LBPIEI.APPLY_CAPTIAL_2018, 0) when LBFN.year=2019 then nvl(LBPIEI.APPLY_CAPTIAL_2019, 0) when LBFN.year=2020 then nvl(LBPIEI.APPLY_CAPTIAL_2020, 0) when LBFN.year=2021 then nvl(LBPIEI.APPLY_CAPTIAL_2021, 0) when LBFN.year=2022 then nvl(LBPIEI.APPLY_CAPTIAL_2022, 0) when LBFN.year=2023 then nvl(LBPIEI.APPLY_CAPTIAL_2023, 0) when LBFN.year=2024 then nvl(LBPIEI.APPLY_CAPTIAL_2024, 0) when LBFN.year=2025 then nvl(LBPIEI.APPLY_CAPTIAL_2025, 0) when LBFN.year=2026 then nvl(LBPIEI.APPLY_CAPTIAL_2026, 0) when LBFN.year=2027 then nvl(LBPIEI.APPLY_CAPTIAL_2027, 0) when LBFN.year=2028 then nvl(LBPIEI.APPLY_CAPTIAL_2028, 0) when LBFN.year=2029 then nvl(LBPIEI.APPLY_CAPTIAL_2029, 0) when LBFN.year=2030 then nvl(LBPIEI.APPLY_CAPTIAL_2030, 0) end) as INVEST_REQUIREMENTS,
REPLACE(LBFN.DEPARTMENT_FULLNAME, ‘varchar1’, ‘’) AS DEPARTMENT_FULLNAME
FROM
table1 LBFN
LEFT JOIN
(
SELECT
LBP.ID ,
LBP.FILE_NO_ID ,
LBPIEM.LOCAL_BOND ,
LBPIEM.EXPECT_ENDYEAR ,
LBPIEM.PRO_CODE_AREA ,
LBPIEM.PROJECT_INCOME_SOURCE,
NVL(LBPIEM.INVESTMENT_TOTAL, 0) AS INVESTMENT_TOTAL
FROM
table2 LBP
JOIN table2_INFO_EXT_MASTER LBPIEM
ON
LBP.ID = LBPIEM.PROJECT_ID
WHERE
1=1
)
LBPM ON LBFN.ID = LBPM.FILE_NO_ID
LEFT JOIN
(
select
APPLY_CAPTIAL_2015,
APPLY_CAPTIAL_2016,
APPLY_CAPTIAL_2017,
APPLY_CAPTIAL_2018,
APPLY_CAPTIAL_2019,
APPLY_CAPTIAL_2020,
APPLY_CAPTIAL_2021,
APPLY_CAPTIAL_2022,
APPLY_CAPTIAL_2023,
APPLY_CAPTIAL_2024,
APPLY_CAPTIAL_2025,
PROJECT_ID ,
APPLY_CAPTIAL_2026,
APPLY_CAPTIAL_2027,
APPLY_CAPTIAL_2028,
APPLY_CAPTIAL_2029,
APPLY_CAPTIAL_2030
from
table2_INFO_EXT_INVEST
where
project_item_ext_id=‘A00069’
)
LBPIEI
ON
LBPM.ID = LBPIEI.PROJECT_ID
/
LEFT JOIN SYSTEM_SETTINGS SS
ON
SS.PARAM_NAME = ‘SYSTEM_LOCALBOND_ENDTIME_FLAG’ */
–WHERE
–LBFN.DEPARTMENT_GUID = ‘JIANGXI-1’
GROUP BY
LBFN.ID ,
LBFN.FILE_NO ,
LBFN.FILE_NAME ,
LBFN.LOCKED ,
LBFN.STATUS ,
TO_CHAR(LBFN.SUBMIT_TIME, ‘YYYY-MM-DD HH24:MI:SS’),
LBFN.FILE_VERSION ,
LBFN.DEPARTMENT_GUID ,
LBFN.YEAR ,
LBFN.SOURCE ,
LBFN.SYS_LOCK ,
REPLACE(LBFN.DEPARTMENT_FULLNAME, ‘varchar1’, ‘’) ,
LBFN.WRAPUP
);

优化后,执行时间从6秒,下降到2秒左右。

标签:sql,when,LBPIEI,LBFN,CAPTIAL,APPLY,nvl,优化,达梦
来源: https://blog.csdn.net/ubotutwin3/article/details/121081935

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有