上一本官方PL/SQL参考书
好的,进入主题
物化视图就是用空间换时间,视图和表的区别一点就是表用来存储数据,而视图可以用来select查询多个表之间的查询数据。物化视图说白了就是把你视图中写的数据提前根据日志拼凑出来,达到用空间来提高效率目的,因为它存储了你查询中部分返回的数据,可以进行直接的读取,比较,而不用再去做对多个表的读取。所以为了方便理解,也可以把物化视图理解成一个可以按时间定时刷新数据的表。
物化视图的创建
create materialized view wuhuashitu_MV refresh force on demand start with sysdate next
to_date(concat(to_char( sysdate+1,’dd-mm-yyyy’),’10:25:00’),’dd-mm-yyyy hh24:mi:ss’) as
select * from gl_je_sources;
1.refresh force: 如何刷新
“完全刷新(COMPLETE): 会删除表中所有的记录(如果是单表刷新,可能会采用TRUNCATE的方式),然后根据物化视图中查询语句的定义重新生成物化视图。
快速刷新(FAST): 采用增量刷新的机制,只将自上次刷新以后对基表进行的所有操作刷新到物化视图中去。FAST必须创建基于主表的视图日志。对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用。
FORCE方式:这是默认的数据刷新方式。Oracle会自动判断是否满足快速刷新的条件,如果满足则进行快速刷新,否则进行完全刷新。”
2.什么情况下刷新
on demand 在需要时才进行更新
on commit 提交触发,一旦基表有了COMMIT,则立刻刷新,使得视图数据与基表数据完全相同,
但是这种方法影响基表数据查询速度。
默认on demand
3.start with..A…next…B.. :何时刷新
A sysdate是让视图开始刷新的时间,此处是系统日期。
B 这个物化视图在每天10:25进行select 表gl_je_sources查询刷新
解决没有创建权限问题:grant create materialized view to 用户名;
细节
在源表建立物化视图日志:
create materialized view log on test_table
tablespace test_space – 日志空间
with primary key; – 指定为主键类型
修改刷新时间:
alter materialized view wuhuashitu_MV refresh force on demand start with sysdate
next to_date(concat(to_char(sysdate+1,’dd-mm-yyyy’),’ 23:00:00’),’dd-mm-yyyy hh24:mi:ss’);
或
alter materialized view wuhuashitu_MV refresh force on demand start with sysdate
next trunc(sysdate,’dd’)+1+1/24; – 每天1点刷新
删除物化视图及日志:
drop materialized view log on test_table; –删除物化视图日志:
drop materialized view mv_materialized_test; –删除物化视图