免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4507 | 回复: 5
打印 上一主题 下一主题

[求助] 一条统计的语句求优化SQL oracle [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-27 16:49 |只看该作者 |倒序浏览
本帖最后由 wbd_96321 于 2014-06-27 16:53 编辑

各位好,有一个统计型的语句,在PLSQL中执行特别慢,求优化
select performer,
performer_name,
sum(dbcount)+sum(ybcount) as allcount,
  sum(dbtime)+sum(ybtime) as allTime  
  from(
       select performer,
              performer_name,
              sum(CASE WHEN state = '7' or state = '9' THEN 1 ELSE 0 END) as dbcount,
              sum(CASE WHEN state = '2' or state = '12' THEN 1 ELSE 0 END) as ybcount,
              sum(CASE WHEN state = '7' or state = '9' THEN  1403884799000-createdate else 0 end) as dbtime,
              sum(CASE WHEN state = '2' or state = '12' THEN  updatedate-createdate else 0 end) as ybtime
              from view_workitem_runahistroty
              where performer like '300001%'  and updatedate>=1325347200000  and updatedate <=1403884799000   and state in(2,7,9,12)  
              group by performer,performer_name
          )
         group by performer,performer_name

就是统计一张表中,人员参与的总量和总用时间, where后面的条件是动态生成的,求大神给优化下,或者换一张思路也可以!
简单描述下, 当state是7 9的时候,是待办状态,算它的用时要求是 当前时间-创建时间, 当2,12的时候 时间=updatetime-createdate
数据集在百万左右!
开始想的是定期写存储过程写到表里去,后来客户提出来数据是根据自由定义查询条件进行查询,所以无法定时的写!

还有个疑问,如果每次查询的时候程序先调用一个存储过去把这查询结果写到一张表红去,然后在程序直接去表里查,这样效率和程序直接调这个语句查询返回结果有多大区别?

论坛徽章:
7
天蝎座
日期:2013-08-16 23:19:32丑牛
日期:2014-01-08 09:20:14寅虎
日期:2014-01-11 11:03:44午马
日期:2014-04-28 11:02:40天秤座
日期:2014-05-16 23:24:24摩羯座
日期:2014-07-20 10:46:04卯兔
日期:2014-08-08 15:21:41
2 [报告]
发表于 2014-06-29 22:32 |只看该作者
优化建议:
1.把结果写到临时表中
2.使用物化视图的刷新方式
3.使用分区表

另外,你这个语句嵌套了多层,你要看一下,那一层次比较慢,然后针对哪一层次进行优化。

论坛徽章:
0
3 [报告]
发表于 2014-06-30 09:57 |只看该作者
回复 2# www_xylove

您好  写到临时表中是调用存储过程来使用吗? 分区现在没办法分了

   

论坛徽章:
0
4 [报告]
发表于 2014-06-30 14:56 |只看该作者
我目前用的是物化视图来查询,速度稍微好一点

论坛徽章:
7
天蝎座
日期:2013-08-16 23:19:32丑牛
日期:2014-01-08 09:20:14寅虎
日期:2014-01-11 11:03:44午马
日期:2014-04-28 11:02:40天秤座
日期:2014-05-16 23:24:24摩羯座
日期:2014-07-20 10:46:04卯兔
日期:2014-08-08 15:21:41
5 [报告]
发表于 2014-06-30 20:41 |只看该作者
回复 3# wbd_96321




   

论坛徽章:
0
6 [报告]
发表于 2014-07-08 17:03 |只看该作者
哦 好吧 谢谢
如果改成物化视图的话,还是运行这条语句,效率能比存储过程差多少??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP