论坛首页 综合技术论坛

使用视图实现数据统计加快程序速度

浏览 3652 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-06-15  

前几天客户要下一个报表.数据大概是2000条,报表结果是要进行多次统计的.如把统计逻辑放到程序中是不可选的.我试了下.下个报表要2分钟.我试了下视图只用了1秒不到.(视图当然会比应用程序快这是一定的.关键是怎样做到统计逻辑在视图中实现)下面介绍下:

 逻辑是这样的:

A表是用户信息表.B表是用户积分情况表,C表是用户积分使用情况表,B表有两种状态.1-用户可使用的积分,2-用户还不能使用的积分,C表有2种状态.1-已使用了的积分数据,2-已冻结的积分数据,现在要求用户的总积分数,已使用积分数,冻结的积分数,还可使用积分数.

我是这样做的:

sql 代码
  1. create or replace view integral_sum_view as  
  2. select "YGJL_PERSONNEL_ID","P_MOBILE","SUMNUMBER","SUMNUMBERAFFIRM","SUMNUMBERPUT","INTEGRAL" from (   
  3.    select a.YGJL_PERSONNEL_ID as YGJL_PERSONNEL_ID   
  4.    decode(b.sumNumber,null,0,b.sumNumber) as sumNumber,--积分总数   
  5.    decode(c.sumNumberAffirm,null,0,c.sumNumberAffirm) as sumNumberAffirm,--已销减积分   
  6.   decode(d.sumNumberPut,null,0,d.sumNumberPut) as sumNumberPut,--当前冻结积分   
  7.   ( (to_number(decode(b.sumNumber,null,0,b.sumNumber))-   
  8.   to_number(decode(c.sumNumberAffirm,null,0,c.sumNumberAffirm)))-   
  9.   to_number(decode(d.sumNumberPut,null,0,d.sumNumberPut))) as INTEGRAL--可用积分   
  10.   from  A a left join(   
  11.   
  12. --统计积分总数   
  13.   select this_.YGJL_PERSONNEL_ID, sum( decode(this_.ITEM_INTEGRAL,null,0,this_.item_integral)  ) as sumNumber from  
  14.   B this_ where   this_.STATE='3'  group by (this_.YGJL_PERSONNEL_ID)   
  15.    ) b on a.ygjl_personnel_id = b.ygjl_personnel_id left join(   
  16. --统计已销减积分   
  17.   select this_.YGJL_PERSONNEL_ID,  sum( decode(this_.TRADE_INTEGRAL,null,0,this_.TRADE_INTEGRAL)  ) as sumNumberAffirm from  
  18.   C this_,  tygjldept5_ where this_.STATE='1'   
  19.   group by (this_.YGJL_PERSONNEL_ID)) c on a.ygjl_personnel_id = c.ygjl_personnel_id left join(   
  20. --统计当前审请积分   
  21.   select this_.YGJL_PERSONNEL_ID, sum( decode(this_.TRADE_INTEGRAL,null,0,this_.TRADE_INTEGRAL)  ) as sumNumberPut from  
  22.   T_INTEGRAL_TRADE this_,   
  23.  and not this_.STATE='2' group by (this_.YGJL_PERSONNEL_ID)) d on a.ygjl_personnel_id = d.ygjl_personnel_id   
  24.   
  25.    )  
仅供学习...........................................
   发表时间:2007-06-15  
两分钟对1秒?什么对比
0 请登录后投票
   发表时间:2007-06-16  
你拿到mysql上试试
0 请登录后投票
   发表时间:2007-06-19  
Lucas Lee 写道
两分钟对1秒?什么对比
我只是比划一下而已.不能把它当作确切数字来说
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics