物化视图实际是个不断刷新的表
举例如下:
create materialized view mv1
build immediate
refresh on commit  -- 提交时立即刷新
enable query rewrite
as
select owner,count(*) 
from all_objects
group by owner;

解决方案 »

  1.   

    普通的视图不行
    oracle817SQL> create view vdemo as select * from t;视图已建立。已用时间:  00: 00: 00.60
    SQL> desc vdemo;
     名称                                      空?      类型
     ----------------------------------------- -------- ------
     AAA                                                NUMBER
     BBB                                                NUMBERSQL> create index idx_taaa on vdemo(aaa);
    create index idx_taaa on vdemo(aaa)
                             *
    ERROR 位于第 1 行:
    ORA-01702: 此处不允许有视图
    已用时间:  00: 00: 00.60
    SQL>
      

  2.   

    楼上的兄弟的说法有问题~~我的视图分别由三个表用union来合成的,如果分开来查找三个表,每个表的时候差不多在10秒左右,但是直接找视图的话,要140多秒,害得我极度郁闷啊~~
      

  3.   

    starbzj(bbb) 我的视图都是200个表合起来的,没索引,那……
      

  4.   

    如果明白普通视图就是把先好的语句重新叫了一个名字的话你就不会提这种问题了。
    最终执行视图查询时候实质还是执行你写的视图的哪个语句在加上你的查询视图的条件综合的语句。oracle依据该整个语句进行分析优化的!
    物化视图实质类似与存储过程+JOB把数据定期刷新到你的物化视图中。物化视图是物理真正存储的数据,故物化视图是可以建立索引的。
    要优化视图的执行速度,实质还是优化你视图中查询语句相关的表的索引或者其他关联看哪个效率最高而做优化!
      

  5.   

    其实主要是 在where 条件中的 列要加索引 ,
    加索引后 最好看一下其执行计划 
    通过计划 你可以看到 哪个索引起了作用 再做适当修改 要注意的就是 在给表的相关里加索引的时候必须是where条件中的列 如果你有联合索引 但在where条件中 又不包含其中的字段的时候 你在执行计划中就会发现其索引根本上没有起到作用!