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

   可以看到MVIEW在Query Rewrite中的重要性, 要在实际应用中使用, 就得知道它的很多方面, 其中刷新是最主要的:

1, MVIEW日志的建立
2, 汇总型的MIVEW的刷新
3, JOIN类型的MVIEW的刷新
4, 更复杂的MVIEW的刷新
5, 分区时的MVIEW的刷新

   在这儿我们主要讨论的是如何实现Fast刷新, 否则没有多少意议的. 我们一点一点来看:

   1, 要实现增量刷新, 必须在MVIEW引的的表上创建MVIEW Log, 我们主要来说一下几个选项

  • WITH ROWID/PRIMARY KEY : 在MVIEW Log中记录ROWID或主键以反映改更过的记录, 对于一般表我推荐用WITH ROWID, 对于IOT, 则请用PRIMARY KEY.
  • (column list): 为了让MVIEW LOG变得小一点你可以只包括进在MVIEW的SQL中引用的字段, Oracle用表来实现MVIEW LOG在更新频繁的表上, MVIEW LOG可能会变得很大. 在指定了WITH PRIMARY KEY时, 主键的列已经包括了, 因此在column list中就不要再写进去了.
  • WITH SEQUENCE: 用于记录修改发生的顺序, 如果没有对基表的DELETE操作则可以不用加这个选项.
  • INCLUDING NEW VALUES: 主要用于在汇总型的MVIEW时, 同时记录字段的旧值和新值以实现快速刷新, 默认是EXCLUDING NEW VALUES, 这时如需要当前值, Oracle需要到表中去查询.

   2, 汇总型的MIVEW的刷新, Oracle支持分组函数及一部份的分析函数的增量刷新.

  • 将count(*)加到MVIEW的SQL, 如果有SUM(*)和COUNT(*)存在就可以实现增量刷新.

  3, JOIN类型的MVIEW的刷新

  • 在Join的MVIEW时将基表的ROWID都加到MVIEW中, 如TA(A,B)和TB(C,D), 则MVIEW时可以写为, SELECT TA.ROWID TA_ROWID,TB.ROWID TB_ROWID, <<collist>> FROM TA,TB WHERE ...

  4, 复杂类型的MVIEW的刷新

  • 可以考虑转换成级联的MVIEW, 如先建JOIN的MVIEW, 再建SUMMARY的MVIEW

  5, 分区时的MVIEW的刷新

  • 用DBMS_MVIEW.MARKER(表名)来获得分区ID, 并加到MIVEW的SELECT列表中, 这样可以实现分区表的增量刷新, 请自已做实验来测试.

   关于这部份的解释, 在<<Data Warehouse Guide>>这一个文档中有很详细的解绍, 我也正在看, 看完后会更新的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值