走在专家的路上,每天一条SQL优化(2)

每天坚持进步一点点,让优秀成为一种习惯。

SQL文本如下:

INSERT INTO BPZONE.EI_ADDITION

  (EID,ROOTPIID, ANCESTOREID, CREATETIME)
 SELECT E.ID_, E.PROC_INST_ID_, '.' || E.ID_ || '.' ANCESTOREID, SYSDATE
 FROM ACTIVITI.ACT_RU_EXECUTION E
 WHERE E.ID_ = E.PROC_INST_ID_
    AND E.PARENT_ID_ IS NULL
    AND E.SUPER_EXEC_ IS NULL
 AND NOTEXISTS (SELECT 1 FROM BPZONE.EI_ADDITION B WHERE B.EID = E.ID_)
;

生成的执行计划如下:

SQL统计信息如下:

表及索引信息:

从上面可以看到,该SQL的总执行时间为63,737,806毫秒(ms)大概17.7小时(h),总执行次数为966次,平均一天执行87次,从而可以判定不是一个使用非常频繁的SQL查询。单次执行时间大概65. 98秒(s)。这个SQL可以进行优化。

优化前,查询部分执行后的执行计划:

建议创建索引的SQL如下:

CREATE INDEX ACTIVITI.idx_ACT_RU_EXECUTION_01 ON ACTIVITI.ACT_RU_EXECUTION(ID_,PROC_INST_ID_,PARENT_ID_,SUPER_EXEC_) ONLINE ;

建议SQL中的查询部分改写为如下形式:

 SELECT E.ID_, E.PROC_INST_ID_, '.' || E.ID_ || '.' ANCESTOREID, SYSDATE
   FROM ACTIVITI.ACT_RU_EXECUTION E
 WHERE E.ID_ = E.PROC_INST_ID_
     AND E.PARENT_ID_ IS NULL
 AND E.SUPER_EXEC_ IS NULL
 AND NOTEXISTS (SELECT  /*+ UNNEST HASH_AJ */ 1 FROM BPZONE.EI_ADDITION B WHERE B.EID = E.ID_);

修改后,文本执行后的执行计划:

可以看到优化后,执行时间从原来的65.98秒(s)变为0.02秒(s),逻辑读从原来的4177变为57,执行时间上性能提高大概3200多倍,逻辑读减少大概73倍。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2017-09-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

性能为王:SQL标量子查询的优化案例分析

黄廷忠(网名:认真就输) 云和恩墨技术专家 个人博客:http://www.htz.pw/ 本篇整理内容是黄廷忠在“云和恩墨大讲堂”微信分享中的讲解案例,S...

3365
来自专栏大内老A

T-SQL Enhancement in SQL Server 2005[上篇]

较之前一版本,SQL Server 2005可以说是作出了根本性的革新。对于一般的编程人员来说,最具吸引力的一大特性就是实现了对CLR的寄宿,使我们可以使用任意...

1715
来自专栏杨建荣的学习笔记

生产环境sql语句调优实战第八篇(r3笔记第24天)

生产环境中的sql语句执行时间是很关键的性能指标,如果某个sql语句执行几个小时,优化以后几分钟,几十秒的话。会有很大的成就感,同时如果某个sql语句执行10秒...

2597
来自专栏跟着阿笨一起玩NET

SQL Server通过整理索引碎片和重建索引提高速度

本文章转载:http://database.51cto.com/art/201108/282408.htm

71
来自专栏算法修养

HDU 1199 Color the Ball

Color the Ball Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32...

2606
来自专栏杨建荣的学习笔记

MySQL中一个文档疏漏的分析测试

最近看到Percona的工程师Agustín写了一篇博客,是关于MySQL触发器和可更新视图的一个观点,具体链接可以参考 https://www.percona...

3209
来自专栏杨建荣的学习笔记

联系生活来简化sql(r3笔记第43天)

目前生产环境中有一条sql语句的CPU消耗很高。执行时间比较长。从awr中抓到的sql语句如下: SELECT run_request.run_mode, ...

2653
来自专栏IT大咖说

2018年,让你的数据库变更快的十个建议

摘要 大多数网站的内容都存在数据库里,用户通过请求来访问内容。数据库非常的快,有许多技巧能让你优化数据库的速度,使你不浪费服务器的资源。在这篇文章中,我收录了十...

3997
来自专栏数据和云

一个不懂业务的DBA不是好的DBA

编辑手记:懂业务,懂系统逻辑,你才能做一个更好的DBA。 在数据库巡检中发现一个MES生产信息数据库中一个存储过程中一条SQL单次逻辑读为2100,且执行很频繁...

2736
来自专栏杨建荣的学习笔记

通过图表简化sql语句的表关联(r4笔记第70天)

在之前的博文中分享过一个执行了两天的一条sql语句,走了两个大表的扫描,导致执行时间很长,通过简化sql做了不小的改进,今天我们来看看还可以做些什么。 上次简化...

3234

扫描关注云+社区