走在专家的路上,每天一条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 条评论
登录 后参与评论

相关文章

来自专栏Albert陈凯

hive的partition的作用和使用方法

一、背景 在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partiti...

2724
来自专栏大数据钻研

MySQL分页性能优化指南

一道面试的问题,当MySQL表中有数据量很大的时候如何做分页。。。。当时只知道在数据量很大的时候可以分表,但不知道不分表时可以怎么做。。。。唉,谁让代理商就那么...

3218
来自专栏沃趣科技

统计信息查询视图|全方位认识 sys 系统库

在上一篇《会话和锁信息查询视图|全方位认识 sys 系统库》中,我们介绍了如何使用 sys 系统库总的视图来查询会话状态信息以及锁等待信息,本期的内容先给大家介...

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

一个MySQL优化案例的初步思路(r8笔记第87天)

今天想起这件同事处理的一个性能优化案例,当时虽然解决了,但是还是留下了几个未解的问题,和大家一起讨论一下。 首先,这个问题是根据反馈sql响应很慢,已经开始影响...

2724
来自专栏向治洪

React Native之Permissions权限适配

做过Android开发的同学都知道,在Android6.0版本之后,系统新增了运行时权限RuntimePermission,这个或许是借鉴的苹果吧(ps,关于详...

3208
来自专栏java一日一条

MySQL分页性能优化指南

很多应用往往只展示最新或最热门的几条记录,但为了旧记录仍然可访问,所以就需要个分页的导航栏。然而,如何通过MySQL更好的实现分页,始终是比较令人头疼的问题。虽...

823
来自专栏java一日一条

MySQL分页性能优化指南

很多应用往往只展示最新或最热门的几条记录,但为了旧记录仍然可访问,所以就需要个分页的导航栏。然而,如何通过MySQL更好的实现分页,始终是比较令人头疼的问题。虽...

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

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

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

901
来自专栏数据处理

hive sql 分区

将t2数据插入到t1,分区日期是‘2018-10-27’,使用overwrite会删除之前分区所有内容,into将内容追加到分区 注意SELECT必须在同一行...

682
来自专栏服务端思维

服务端开发指南与最佳实战 | 数据存储技术 | MySQL(03) 如何设计索引

改善性能最好的方式,就是通过数据库中合理地使用索引,换句话说,索引是提高 MySQL 数据库查询性能的主要手段。在下面的章节中,介绍了索引类型、强制索引、全文索...

904

扫码关注云+社区