Tuning 16 Using Materialized view
物化视图表示在数据库的其他地方另外存放了一份as 后边的内容,
如果只是普通view, 那么 rowid 是相同的, view相当于指针, 它指向基表.
而物化视图的rowid 与基表是不一样的, 所以它肯定是在数据库中又保存了一份相应内容.
那么, 当然你改变基表的数据, 物化视图里的值是不变的.
那么物化视图要通过刷新和基表进行同步(完全刷新, fast刷新)
刷新
c 表示 complete
另外, 刷新后的值虽然一样, 但是 rowid 同样还是不一样, 也就是说,它同样还独立的存储在数据库的另一个部分。同时, 所有的rowid都发生了变化, 所以, 就是将物化视图所有的行都删除, 然后再copy基表的数据, 所以 complete 方式要改变物化视图里所有的行, 尽管你只改变了基表中的一行.
这个 LOG 是用来记录基表发生变化的.
这里的 fast 就是说, 创建的物化视图是 fast 方式. 注意, 这里的rowid, 基表没有更新的行, 对应的物化视图的rowid是不变的.
另外, 物化视图同步后, 物化视图的LOG就会清空.
物化视图的用处: (提高速度)
OLAP: 比较好用, 可以用来创建 summary 表
用在数据复制, 两个数据库之间, 先通过 dblink 连接, 然后利用 materialized view 的刷新功能来实现数据库copy. 比如基表在数据库1中, materialized view 在数据库2中. 直接复制成了 summary 数据.
比如 level 0 是基表, 也就是说 materialized view 上还可以建立物化视图.
对应用程序来说是查询基表, 但其实后台是查询的 materialized view, 但是, 前台并不知道.
执行这个 select owner, count(*) from my_all_objects group by owner, 这时, 这个语句执行全表扫描的对象就变了, 变成了物化视图.