建议做存储过程实现统计汇总的功能,并记入临时表中。因为你的数据量较大,写存储过程时应梢加注意。
方法:
一:首先创建一个临时表:temp(id,value)
二:根据不同的表执行插入语句:
  insert into temp values (select id,sum(value) from tab1 group by id);
  insert into temp values (select id,sum(value) from tab2 group by id);
  ...
三:统计最后结果:
  select id,sum(value) from temp group by id;
四:做结果处理。

解决方案 »

  1.   

    可以利用子查询来实现,例如:   select id,sum(value) from (select id,sum(value) as value from tab1 group by id 
                          union all 
                           select id,sum(value) as value from tab2 group by id
                            ......
                           ) group by id;
      

  2.   

    同意qiuyang_wang(小数点),建临时表,用存储过程是最快的。。
    直接union二十多个表,还要做group的话会慢死你的。。
      

  3.   

    用昨时表的确是办法,但每次建立会话时重新插入数据,实在不能接受.
    若用快照,效果更加好,它的变化,快照即进更新.
    CREATE MATERIALIZED VIEW mv1 REFRESH FAST ON COMMIT
       BUILD IMMEDIATE
       AS 
          select id,sum(value) value from (
          SELECT id,value 
          FROM t1
          union all
          select id,value
          from t2
          .....)
          group by id;
      

  4.   

    谢谢大家的意见。qiuyang_wang(小数点)的方法,对我的数据有个可能的问题,就是那20几个table,每个table内不重复的id都有300多万个,所以temp表最后可能会有6000万条记录,可能占太大空间
    因为我实际的统计其实并不是只对一个字段,还有几个字段,那么这个临时表就会占1G多空间beckhambobo(beckham) 用物化视图的话,我的问题是最后统计的那句sum加group by会不会很慢,而且跟直接用分区表速度上谁更快呢??