- 论坛徽章:
- 0
|
本帖最后由 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
数据集在百万左右!
开始想的是定期写存储过程写到表里去,后来客户提出来数据是根据自由定义查询条件进行查询,所以无法定时的写!
还有个疑问,如果每次查询的时候程序先调用一个存储过去把这查询结果写到一张表红去,然后在程序直接去表里查,这样效率和程序直接调这个语句查询返回结果有多大区别? |
|