我有一个视图,与多个表相关连,并使用了union,在查询这个视图的时候非常慢。我想用一个临时表与这个视图保持数据同步,提高查询效率,有什么可行的方案吗。谢谢。

解决方案 »

  1.   

    SQL> create view v_test as select * from test;视图被创建SQL> edSQL> create materialized view mv_test refresh complete  as select * from v_test;物化视图被创建SQL> select * from test;        ID NAME                                               CODE                                                       RN        RN1
    ---------- -------------------------------------------------- -------------------------------------------------- ---------- ----------
             1 aaa                                                nPPP1                                                       1 
             1 aaa                                                nPPP2                                                       2          1
             2 bbb                                                nQQQ1                                                       1 SQL> insert into test values(3,'test','test',3,3);1 行 已插入SQL> commit;提交完成SQL> select * from test;        ID NAME                                               CODE                                                       RN        RN1
    ---------- -------------------------------------------------- -------------------------------------------------- ---------- ----------
             1 aaa                                                nPPP1                                                       1 
             1 aaa                                                nPPP2                                                       2          1
             2 bbb                                                nQQQ1                                                       1 
             3 test                                               test                                                        3          3SQL> select * from mv_test;        ID NAME                                               CODE                                                       RN        RN1
    ---------- -------------------------------------------------- -------------------------------------------------- ---------- ----------
             1 aaa                                                nPPP1                                                       1 
             1 aaa                                                nPPP2                                                       2          1
             2 bbb                                                nQQQ1                                                       1 SQL> select * from v_test;        ID NAME                                               CODE                                                       RN        RN1
    ---------- -------------------------------------------------- -------------------------------------------------- ---------- ----------
             1 aaa                                                nPPP1                                                       1 
             1 aaa                                                nPPP2                                                       2          1
             2 bbb                                                nQQQ1                                                       1 
             3 test                                               test                                                        3          3SQL> exec dbms_mview.refresh('mv_test','c');PL/SQL 过程成功完成SQL> select * from mv_test;        ID NAME                                               CODE                                                       RN        RN1
    ---------- -------------------------------------------------- -------------------------------------------------- ---------- ----------
             1 aaa                                                nPPP1                                                       1 
             1 aaa                                                nPPP2                                                       2          1
             2 bbb                                                nQQQ1                                                       1 
             3 test                                               test                                                        3          3
      

  2.   

    楼主,你表里数据更新速度快不,如果不是很快,建议楼主采用cenlmmx(学海无涯苦作舟) 的方法。创建物化视图的时候可以考虑用start with sysdate next sysdate+2选项,要数据库自己来刷新数据,其中sysdate+2是下次刷新的时间,楼主可以根据实际情况设定。
      

  3.   

    selecthis(小懒蛋)指的效率问题是什么,我如果10分钟刷新一次数据,可以吗,如果我有10万条记录,刷新一次要多长时间?
      

  4.   

    create materialized view mv_test 
    refresh complete  
    start with sysdate next sysdate+2
    as select * from v_test;
      

  5.   

    可以作到每10分钟刷新一次
    start with sysdate next sysdate+10/24*60影响刷新的时间有很多因素,比如硬件的配置,
    访问的是本地表还是远程表,等等。
      

  6.   

    刚才试了一下,我原来的视图里面有子查询,我执行的时候告诉我不能有子查询。create materialized view mpubresume
    refresh complete
    start with sysdate next sysdate+2
     as
    select * from baseuser
      

  7.   

    如果是本地表,10w条数据应该不要好长时间,
    建议楼主先用cenlmmx(学海无涯苦作舟) 的方法测试下还可以用增量刷新的方式,但需要在源表上建立日志表
      

  8.   

    zhzhl0(太极)能看看我发给你的消息吗。