一、物化的一般使用方法物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,不论什么对视图的查询,oracle都实际上转换为视图SQL语句的查询。这样对总体查询性能的提高。并没有实质上的优点。
1、物化视图的类型ON DEMAND、ON COMMIT。
二者的差别在于刷新方法的不同,ON DEMAND顾名思义。仅在该物化视图“须要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT,即事务提交。则立马刷新,立马更新物化视图,使得数据和基表一致。
物化视图能够分为下面三种类型:包含聚集的物化视图。仅仅包含连接的物化视图;嵌套物化视图。三种物化视图的高速刷新的限制条件有非常大差别,而对于其它方面则差别不大。创建物化视图时能够指定多种选项,下面对几种基本的选择进行简单说明:
创建方式(Build Methods):包含BUILD IMMEDIATE和BUILD DEFERRED两种。
BUILD IMMEDIATE是在创建物化视图的时候就生成数据,而BUILD DEFERRED则在创建时不生成数据。以后依据须要在生成数据。默觉得BUILD IMMEDIATE。
查询重写(Query Rewrite):包含ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。分别指出创建的物化视图是否支持查询重写。
查询重写是指当对物化视图的基表进行查询时,Oracle会自己主动推断能否通过查询物化视图来得到结果,假设能够,则避免了聚集或连接操作。而直接从已经计算好的物化视图中读取数据。
默觉得DISABLE QUERY REWRITE。
在建立物化视图的时候能够指定ORDER BY语句,使生成的数据依照一定的顺序进行保存。
只是这个语句不会写入物化视图的定义中。并且对以后的刷新也无效。
2、ON DEMAND物化视图物化视图的创建本身是非常复杂和须要优化參数设置的,特别是针对大型生产数据库系统而言。但Oracle同意以这样的最简单的,类似于普通视图的方式来做。所以不可避免的会涉及到默认值问题。也就是说Oracle给物化视图的重要定义參数的默认值处理是我们须要特别注意的。物化视图的特点:
(1) 物化视图在某种意义上说就是一个物理表(并且不仅仅是一个物理表),这通过其能够被user_tables查询出来,而得到佐证。
(2) 物化视图也是一种段(segment)。所以其有自己的物理存储属性;
(3) 物化视图会占用数据库磁盘空间,这点从user_segment的查询结果。能够得到佐证。
创建语句:
SQL> create materialized view mv_name as select * from table_name;
默认情况下,假设没指定刷新方法和刷新模式,则Oracle默觉得FORCE和DEMAND。
物化视图的数据怎么随着基表而更新?
Oracle提供了两种方式,手工刷新和自己主动刷新,默觉得手工刷新。也就是说,通过我们手工的运行某个Oracle提供的系统级存储过程或包。来保证物化视图与基表数据一致性。这是最基本的刷新办法了。
自己主动刷新,事实上也就是Oracle会建立一个job,通过这个job来调用同样的存储过程或包。加以实现。
ON DEMAND物化视图的特性及其和ON COMMIT物化视图的差别,即前者不刷新(手工或自己主动)就不更新物化视图,而后者不刷新也会更新物化视图,——仅仅要基表发生了COMMIT。
创建定时刷新的物化视图(指定物化视图每天刷新一次):
SQL> create materialized view mv_name refresh force on demand start with sysdate next sysdate+1;
上述创建的物化视图每天刷新,可是没有指定刷新时间,假设要指定刷新时间(比方每天晚上10:00定时刷新一次):
SQL> create materialized view mv_name refresh force on demand start with sysdate next to_date( concat( to_char( sysdate+1,'dd-mm-yyyy'),' 22:00:00'),'dd-mm-yyyy hh24:mi:ss');
3、ON COMMIT物化视图ON COMMIT物化视图的创建,和上面创建ON DEMAND的物化视图差别不大。
因为ON DEMAND是默认的。所以ON COMMIT物化视图。须要再添加个參数就可以。
须要注意的是,无法在定义时仅指定ON COMMIT。还得附带个參数才行。创建ON COMMIT物化视图:
SQL> create materialized view mv_name refresh force on commit as select * from table_name;
备注:实际创建过程中,基表须要有主键约束,否则会报错(ORA-12014)。
4、物