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秒左右。

达梦云适配技术社区的网址。https://eco.dameng.com

达梦sql优化实践5相关推荐

  1. 达梦SQL优化--ET使用方法

    ET 是达梦数据库内置的SQL性能优化分析工具,它可以统计指定会话ID执行的SQL的所有操作符的执行时间,对于分析优化SQL提供比较直观的数据依据,对于达梦数据库SQL优化,ET的使用是必须要掌握的技 ...

  2. 达梦数据库优化器执行计划解读

    说明: 1.达梦数据库执行计划 一条SQL语句在数据库中的执行过程或者访问路径的描述,通过执行计划,可以知道优化器对sql进行了哪些处理,使用了哪些方式去执行sql.执行计划看起来就像一棵树,执行过程 ...

  3. 达梦数据库sql优化实践2

    Sql执行过程中,对有索引的列上使用隐式类型转换或函数都会造成索引失效的情况,需要特别注意. 原sql语句如下 SELECT TAB1.RECORDID , TAB1.F_CENTRAL_ID TAB ...

  4. sql int转换为varchar_常见SQL优化实践

    (1)负向条件查询不能使用索引select * from user where status!=0 ,not in/not exists都不是好习惯可以优化为in查询:select * from us ...

  5. 达梦查询sql优化几种方式

    问题描述 在近做项目的过程中遇到了达梦查询sql 性能过慢问题,把平常在MySQL和Oracle中一些优化方法拿到达梦这边来使用,发现效果是比较小的,最终通过查阅资料发现了达梦优化sql的方式和MyS ...

  6. 达梦数据库卡慢简单分析

    1.检查是否有锁表 查询锁表:select sess_id,sql_text from v$sessions sess,v$lock lck where         sess.trx_id=lck ...

  7. DM达梦执行计划和ET的查看使用

    在学习DM的SQL优化过程中,DM有两个功能能够帮助我们更方地分析SQL语句的执行情况,分别是物理执行计划和ET.所以学会看懂执行计划和ET对于达梦SQL优化是很重要的事情. 关于物理执行计划: 物理 ...

  8. 达梦数据库导入oracle数据_Java项目,从Oracle迁移到达梦数据库笔记

    达梦数据库是个国产数据库,据说对Oracle有很好的兼容,本人亲自从Oracle11g迁移到达梦6.0的数据库上来,遇到一些问题,以下是问题记录: 1.字段名错误 虽然达梦SQL可以兼容字段大小写,但 ...

  9. .net 操作达梦数据库

    一,简介 偶然看到了国产数据库--达梦数据库.顿时起了兴趣,捣鼓了一番. 下面这段简介摘自百度百科 达梦数据库是武汉华工达梦数据库有限公司推出的具有完全自主知识产权的高性能数据库产品.它采用" ...

  10. 【峥妍的达梦数据库培训心得体会】

    在达梦数据库3天的培训过程中,作为一个数据库小白,我对达梦数据有了充分的了解,同时加深了我对当前国产数据的认识.通过此次培训,不只提升了我对达梦数据库的理论知识的了解,同时也提升了本身的动手能力,对达 ...

最新文章

  1. java post 打开新页面_JAVA后台POST/GET访问方法
  2. 查看oracle中path,查看oracle进程启动时的环境变量
  3. Install stardict on Ubuntu
  4. SpringSecurity集中式整合之使用数据库数据实现认证
  5. ASP.NET Core使用HostingStartup增强启动操作
  6. 怎样用c语言定义高幂整数,位操作运算的奇技淫巧!(附源码)
  7. oracle如何把字符集改回默认,更改oracle字符集
  8. SWAT 学习相关基础知识(一)---Mr.Zhang
  9. c语言语法sc,适合于嵌入式系统的C语言单元测试框架:SCUNIT
  10. Sphinx 2.2.3 安装和配置,英文数字中文搜索
  11. 进程杀手 (prockiller)V2.82绿色版
  12. 卡内基梅隆计算机金融,大神offer|恭喜四位再来人学员斩获卡内基梅隆大学-计算金融硕士...
  13. ASPP - 空洞空间金字塔池化
  14. linux ps1 主机名 ip,Bash Shell PS1: 自定义你的linux提示符十例
  15. 计算机excel操作知识点汇总,【计算机二级之Excel】考点汇总
  16. PowerManagerService类大致解读
  17. 又是一年将尽时 移动开始话费大促销
  18. 分布式论文精读1:MapReduce
  19. 可燃气传感器 android,可燃气体传感器工作原理,一文看懂!
  20. 新库上线 | CnOpenData·A股上市公司现场检查随机抽查数据

热门文章

  1. 淘宝上卖云控系统靠谱吗?
  2. 基于单片机的学生视力保护仪
  3. 地理坐标系:WGS84和BD09互转
  4. openwrt修改默认网关地址_非常详细的锐捷网关路由配置教程,适合新手小白
  5. 网站盈利模式分析分类
  6. PyG教程(2):图数据
  7. vue 中使用 vue-amap(高德地图) 【'AMapUI' is not defined 】
  8. 百度搜索开放平台,百度搜索api
  9. 上传多张图片到oss服务器
  10. Locks Aren't Slow; Lock Contention Is