ITPUB论坛-中国最专业的IT技术社区

 找回密码
 注册
查看: 419|回复: 5

超多逻辑读的sql该如何优化

[复制链接]
论坛徽章:
0
发表于 2017-9-13 14:30 | 显示全部楼层 |阅读模式
本帖最后由 zhjiafe 于 2017-9-23 19:55 编辑

一个超多逻辑读的SQL,请各位给点优化建议


论坛徽章:
0
 楼主| 发表于 2017-9-13 14:34 | 显示全部楼层
本帖最后由 zhjiafe 于 2017-9-23 19:57 编辑

aaaaaaaaaaaaaaaaaaaaaaaaaa

使用道具 举报

回复
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
发表于 2017-9-13 15:59 | 显示全部楼层

Try!

select count(*)
from
(
select RES.rowid
  from ACT_HI_TASKINST RES
inner join ACT_HI_PROCINST E ON (RES.PROC_INST_ID_ = E.ID_ and E.DELETE_REASON_ is null)
inner join (SELECT PROC_INST_ID_, MAX(START_TIME_) as MaxTime
               FROM ACT_HI_TASKINST
              WHERE (ASSIGNEE_ = '01fe715413c542da967398883b2ee701' or id_ in (''))
              GROUP BY PROC_INST_ID_) f on RES.PROC_INST_ID_ = f.PROC_INST_ID_
                                       AND RES.START_TIME_ = f.MaxTime
inner join ACT_RE_PROCDEF D on RES.PROC_DEF_ID_ = D.ID_
inner join PROCESS_INSTANCE_NO pin on (RES.PROC_INST_ID_ = pin.PROCESS_INSTANCE_ID)
  left join T_VBBK vbbk on (vbbk.FORM_INSTANCE_ID = E.BUSINESS_KEY_ and vbbk.BB12 <> 'O')
WHERE (RES.ASSIGNEE_ = 'a0efaec2d9b14742aaaf45b6dc5e16e9' or RES.ID_ IN (''))
   and (RES.END_TIME_ is not null)
   and E.END_TIME_ is not null
   and D.ID_ IN (select h.act_process_definition_id
                   from process_ru_record h
                   left join process_definition k on h.process_definition_id = k.id
                  WHERE k.id = 'af9afe4128d2423bb6adbaa7a674cddb')
union
select RES.rowid
  from ACT_HI_TASKINST RES
inner join ACT_HI_PROCINST E ON (RES.PROC_INST_ID_ = E.ID_ and E.DELETE_REASON_ is null)
inner join (SELECT PROC_INST_ID_, MAX(START_TIME_) as MaxTime
               FROM ACT_HI_TASKINST
              WHERE (ASSIGNEE_ = '01fe715413c542da967398883b2ee701' or id_ in (''))
              GROUP BY PROC_INST_ID_) f on RES.PROC_INST_ID_ = f.PROC_INST_ID_
                                       AND RES.START_TIME_ = f.MaxTime
inner join ACT_RE_PROCDEF D on RES.PROC_DEF_ID_ = D.ID_
inner join PROCESS_INSTANCE_NO pin on (RES.PROC_INST_ID_ = pin.PROCESS_INSTANCE_ID)
  left join T_VBBK vbbk on (vbbk.FORM_INSTANCE_ID = E.BUSINESS_KEY_ and vbbk.BB12 <> 'O')
WHERE (RES.ASSIGNEE_ = 'a0efaec2d9b14742aaaf45b6dc5e16e9' or RES.ID_ IN (''))
   and (RES.ID_ IN(select tt.task_id
                     from task_transfer tt inner join task_idea ti on tt.task_id = ti.task_id
                    where ti.content is not null
                      and tt.user_id = '3dc10e9d93594b7993d27db02853d433'))
   and E.END_TIME_ is not null
   and D.ID_ IN (select h.act_process_definition_id
                   from process_ru_record h
                   left join process_definition k on h.process_definition_id = k.id
                  WHERE k.id = 'af9afe4128d2423bb6adbaa7a674cddb')
);

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2017-9-13 16:17 | 显示全部楼层
本帖最后由 zhjiafe 于 2017-9-23 19:56 编辑

@bell6248,逻辑读少了很多,但响应时间和COST增加了


使用道具 举报

回复
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
发表于 2017-9-13 17:02 | 显示全部楼层
zhjiafe 发表于 2017-9-13 16:17
@bell6248,逻辑读少了很多,但响应时间和COST增加了

SQL> select count(*)

把该语句执行2次, 取第二次的,由于目前recursive calls不为0

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2017-9-13 17:20 | 显示全部楼层
本帖最后由 zhjiafe 于 2017-9-23 19:56 编辑

多次执行后, recursive calls已变为0,consistent gets为823更少了,但Cost (%CPU)和Time 比调整之前增加了


使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表