场景:
表:ACTUAL 数据量66万;REQUIRED 数据量表660万;DEVICE 数据量9万(这三个表通过外键关键)[顺序D→R→A]
物化视图:MAT_DRA通过LEFT JOIN从表A→R→D根据外键关联得出  数据量66万物化视图表结构:
data_id   number
group_name  varchar2
part_name   varchar2
plan_id  NUMBER
plan_name  varchar2
act_time DATE
act_Date DATE问题:物化视图中的数据group_name,part_name,plan_id,plan_name存在大量重复数据,主要通过act_time,act_date字段进行区分和统计,但对该物化视图执行
select group_name,part_name,plan_id,plan_name from MAT_DRA where act_date between to_date('2009-07-01','yyyy-mm-dd') and to_date('2009-07-31','yyyy-mm-dd') group by group_name,part_name,plan_id,plan_name
或者用DISTINCT进行过滤重复时用时都在27秒左右,客户不满意(要求在3秒内出结果)...应用场景:主要通过输入时间进行查询.已经做的事:在关键字段处做了索引,试过用存储过程(效果不明显)请各位大侠帮忙出个想法.(昨天加班到22:00都没搞完...)求救......

解决方案 »

  1.   

    补充:ACTUAL 表每天增长数据量在2-3万之间;REQUIRED 表每天增长数据量在2-4万之间
      

  2.   

    act_date 加索引了吗? 
    查看一下执行计划~
      

  3.   

    不采用distinct
    由于其会使索引失效。
    故而使用
    类似于
    select * from  table_name a where rowid = (
    select max(rowid) from table_name t where  a.xxx=b.xxx and a.yyy=b.yyy)
    也就是把相同的写到where条件里面,这样就可以拿到相同数据里面rowid最大的那条值。