ITPub博客

首页 > 数据库 > Oracle > 一次报表查询优化

一次报表查询优化

原创 Oracle 作者:yingyifeng306 时间:2025-03-10 14:38:34 0 删除 编辑

1.  优化背景:客户反馈一个报表单次查询超过 1 分钟

2.  优化过程,和开发沟通页面调用具体 sql ,存储过程中通过 dblink 调用其他库的多个视图,将存储过程内容修改成 declare 块,添加 DBMS_OUTPUT.PUT_LINE 输出每一步执行时间,定位到下面的sql 执行时间长

 

-- 远程数据库执行

select  *

           from  cb_01_01

          where  JITAINAME in

               ( SELECT  REGEXP_SUBSTR( ' 股份 39 号机 ' , '[^,]+' , 1 , rownum )

                   FROM  dual

                 CONNECT   BY   rownum  <=

                            LENGTH ( ' 股份 39 号机 ' ) -

                            LENGTH (regexp_replace( ' 股份 39 号机 ' , ',' , '' )) + 1 )

            and  COLLECTIONTIMES <= '2024-10-10 23:59:59'

            and  COLLECTIONTIMES >= '2024-10-01 00:00:00' ;

 

 

--cb_01_01 的内容

 

 

 

 

-- 对语句进行修改

select  *

           from  cb_01_01

          where  jitai in  ( select  pk_defdoc from  bd_defdoc where  ( dr = 0   or  dr is   null  ) and   name   in

               ( SELECT  REGEXP_SUBSTR( ' 股份 39 号机 ' , '[^,]+' , 1 , rownum )

                   FROM  dual

                 CONNECT   BY   rownum  <=

                            LENGTH ( ' 股份 39 号机 ' ) -

                            LENGTH (regexp_replace( ' 股份 39 号机 ' , ',' , '' )) + 1 ))

            and  COLLECTIONTIMES <= '2024-10-10 23:59:59'

            and  COLLECTIONTIMES >= '2024-10-01 00:00:00' ;

 

 

-- 修改后的语句到源库执行,时间还是 26 秒多

 

 

-- 使用 drving_site 解决查询问题,执行时间 2.5 秒左右

 

 

-- 用上面的语句替换存储过程中的内容,执行时间还是要 1 分钟左右,问题原因为 ddl 、 dml 语句中 drving_site 不生效,通过使用游标将数据 insert 到临时表

 

 

-- 这时存储过程执行时间从 1 分钟多到 32 秒左右,继续看下一段慢的 sql 。  

 

-- 最终查询的表和上面的临时表一样直接使用上面的临时表

 

存储过程的执行时间从原来的 1 分钟多到 6 秒左右,业务核对存储过程修改前后报表结果进行对比,数据一致


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23732248/viewspace-3075298/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
ITpub论坛高可用版主,擅长研究Oracle 内部原理、新特性、高可用和性能调优等,多年来一直保持着对新事务旺盛的求知欲。热切关注 Oracle 和其它相关技术

注册时间:2011-10-12

  • 博文量
    291
  • 访问量
    1592991