ORACLE物化视图-Query Rewrite的一般理解之三

  在Query Rewrite中大家看到这个技术离不开一样东西, 实体化视图, 简称MVIEW. 这是Oracle在8i中首先推出的技术, MVIEW除了在Query Rewrite中使用外, 还在Master - Slave复制中有很重要的作用, 在这儿我们主要关心Query Rewrite相关的地方, Oracle在Query Rewrite方面越来越强了, 在Oracle 8i中基本上是Text Match的Query Rewrite, 在9i/10g中有很大的更新了, 还支持一般的Query Rewrite(指Text Match以外的), 如可以试一下最后一个SQL语句, 在8i中不能rewrite, 而在9i中却可以:

SQL> desc mvtest8
 Name                           Null?    Type
 ------------------------------ -------- -----------------
 OWNER                                   VARCHAR2(30)
 OBJECT_NAME                             VARCHAR2(128)

SQL> create materialized view mv8_test
  2  enable query rewrite
  3  as
  4    select owner,count(*) rowcnt from mvtest8
  5    group by owner;

SQL> select count(*) from mvtest8 where owner='SYS';

   在应用MVIEW实现Query Rewrite时, 需要对MVIEW有一个基本的了解, 主要要理解以下两点:

1, MVIEW的设计, 可以满足多少SQL的Rewrite.
2, MVIEW的刷新, MIVEW是一个中间表, 数据不一定能最新, 对于大量的数据刷新方法也是很重要的.

   其实在这两点之间是有些冲突的, 要实现第一点, 可能复杂的MVIEW定义有利于提高Query Rewrite后的执行效率, 但复杂的MVIEW每次刷新都可能要抄描全部记录, 对于MVIEW刷新, 在有MVIEW LOG有情况下, MVIEW可以实现增量刷新的, 一般来说要实现增量刷新需要满足下面这样的条件:

1, MVIEW的SQL中不能包函返回值不确定的函数, 如sysdate, rownum等等.
2, MVIEW的SQL中只包括汇总时,最好将COUNT(*), COUNT(字段) 这样的分组函数加进去.
3, MVIEW的SQL中只包括Join时.

    关于创建MVIEW和MVIEW LOG的语法在这儿就不说了, MVIEW的刷新有三种选项, FULL: 完全刷新; FAST: 利用MVIEW LOG进行增量刷新; FORCE: 如果不能用FAST, 就用FULL. 对于刷新的时机主要有两种, ON DEMAND: 手工刷新(Crontab, Job, Schedule等), ON COMMIT: 在Commit后进行马上刷新(必须是Fast, 否则你惨了).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值