oracle物化视图的通常用法数据库
物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对总体查询性能的提升,并无实质上的好处。oracle
一、物化视图的类型:ON DEMAND、ON COMMIT 两者的区别在于刷新方法的不一样,ON DEMAND顾名思义,仅在该物化视图“须要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;而ON COMMIT是说,一旦基表有了COMMIT,即事务提交,则马上刷新,马上更新物化视图,使得数据和基表一致。 工具
二、ON DEMAND物化视图 物化视图的建立自己是很复杂和须要优化参数设置的,特别是针对大型生产数据库系统而言。但Oracle容许以这种最简单的,相似于普通视图的方式来作,因此不可避免的会涉及到默认值问题。也就是说Oracle给物化视图的重要定义参数的默认值处理是咱们须要特别注意的。 物化视图的特色:性能
(1) 物化视图在某种意义上说就是一个物理表(并且不只仅是一个物理表),这经过其能够被user_tables查询出来,而获得佐证; 优化
(2) 物化视图也是一种段(segment),因此其有本身的物理存储属性;索引
(3) 物化视图会占用数据库磁盘空间,这点从user_segment的查询结果,能够获得佐证;事务
建立语句:create materialized view mv_name as select * from table_name 默认状况下,若是没指定刷新方法和刷新模式,则Oracle默认为FORCE和DEMAND。同步
物化视图的数据怎么随着基表而更新? Oracle提供了两种方式,手工刷新和自动刷新,默认为手工刷新。也就是说,经过咱们手工的执行某个Oracle提供的系统级存储过程或包,来保证物化视图与基表数据一致性。这是最基本的刷新办法了。自动刷新,其实也就是Oracle会创建一个job,经过这个job来调用相同的存储过程或包,加以实现。 it
ON DEMAND物化视图的特性及其和ON COMMIT物化视图的区别,即前者不刷新(手工或自动)就不更新物化视图,然后者不刷新也会更新物化视图,——只要基表发生了COMMIT。 table
建立定时刷新的物化视图:create materialized view mv_name refresh force on demand start with sysdate next sysdate+1 (指定物化视图天天刷新一次) 上述建立的物化视图天天刷新,可是没有指定刷新时间,若是要指定刷新时间(好比天天晚上10:00定时刷新一次):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')
三、ON COMMIT物化视图 ON COMMIT物化视图的建立,和上面建立ON DEMAND的物化视图区别不大。由于ON DEMAND是默认的,因此ON COMMIT物化视图,须要再增长个参数便可。 须要注意的是,没法在定义时仅指定ON COMMIT,还得附带个参数才行。 建立ON COMMIT物化视图:create materialized view mv_name refresh force on commit as select * from table_name 备注:实际建立过程当中,基表须要有主键约束,不然会报错(ORA-12014)
四、物化视图的刷新 刷新(Refresh):指当基表发生了DML操做后,物化视图什么时候采用哪一种方式和基表进行同步。刷新的模式有两种:ON DEMAND和ON COMMIT。(如上所述) 刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。FAST刷新采用增量刷新,只刷新自上次刷新之后进行的修改。COMPLETE刷新对整个物化视图进行彻底的刷新。若是选择FORCE方式,则Oracle在刷新时会去判断是否能够进行快速刷新,若是能够则采用FAST方式,不然采用COMPLETE的方式。NEVER指物化视图不进行任何刷新。 对于已经建立好的物化视图,能够修改其刷新方式,好比把物化视图mv_name的刷新方式修改成天天晚上10点刷新一次:alter 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')
五、物化视图具备表同样的特征,因此能够像对表同样,咱们能够为它建立索引,建立方法和对表同样。
六、物化视图的删除: 虽然物化视图是和表一块儿管理的,可是在常用的PLSQL工具中,并不能用删除表的方式来删除(在表上右键选择‘drop’并不能删除物化视图),可使用语句来实现:drop materialized view mv_name