一、简介
物化视图,它是用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,从而快速的得到结果,我们可以将物化视图当成一个保存查询结果集的一张表。
物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL 语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。
二、建立一个满足需求的物化视图
创建一个物化视图
1.首先需要创建物化视图时创建存储的日志空间(存储物化视图的对象的改变信息)
CREATE MATERIALIZED VIEW LOG ON bill WITH ROWID;
2.创建物化视图
create materialized view mv_bill
TABLESPACE BILL --保存表空间
BUILD DEFERRED --延迟刷新不立即刷新,此建立初始视图一般没数据
refresh fast --快速刷新(只刷新变更数据)
with rowid --根据rowid刷新(默认是主键)
On demand --按照指定方式刷新(定时刷新)
start with to_date('2013-10-10 20:00:00','YYYY-MM-DD HH24:MI:SS') next sysdate+1/48
as
select id,user_id,amount from bill where state='pay';
假设mv_bill物化视图保存的是银行网上转账的用户账户金额,我们都知道在网上转账需要第二天0点余额才进行刷新,实际上我们的交易已经成功,记录在bill表中,而我们账户的余额提现在mv_core_bill中,每天10点的视图刷新后,那么钱就到账了。这只是一个可能的简单例子,下面需要介绍物化视图的参数来合理应用这项技术。
三、物价视图的参数
1、创建方式(Build Methods):Build Immediate 和Build Deferred两种,Build Immediate 指创建后立即生成数据。Build Deferred指在下一次刷新时生成数据。
2、查询重写(Query Rewrite):Enable Query Rewrite和Disable Query Rewrite两种。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,直接从物化视图中读取数据。默认为Disable Query Rewrite。
3、刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:On Demand和On Commit。On Demand指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新。On Commit指物化视图在对基表的DML操作提交的同时进行刷新。刷新的方法有四种:Fast 、Complete 、Force和Never。Fast 刷新采用增量刷新,只刷新自上次刷新以后进行的修改。Complete 刷新对物化视图进行截断再进行完全的刷新。如果选择Force方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用Complete 的方式。Never指物化视图不进行任何刷新。默认值是Force On Demand。
4、物化视图日志:如果需要进行快速刷新,则需要建立物化视图日志。物化视图日志根据不同物化视图的快速刷新的需要,可以建立为RowID或Primary Key类型的。还可以选择是否包括Sequence、Including New Values以及指定列的列表。
可以指明on prebuild Table语句将物化视图建立在一个已经存在的表上。这种情况下,物化视图和表必须同名。当删除物化视图时,不会删除同名的表。这种物化视图的查询重写要求参数Query_Rewrite_integerity必须设置为 trusted或者stale_tolerated。(可以用于不停机的大量数据迁移,涉及一个实验)
物化视图,它是用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,从而快速的得到结果,我们可以将物化视图当成一个保存查询结果集的一张表。
物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL 语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。
二、建立一个满足需求的物化视图
创建一个物化视图
1.首先需要创建物化视图时创建存储的日志空间(存储物化视图的对象的改变信息)
CREATE MATERIALIZED VIEW LOG ON bill WITH ROWID;
2.创建物化视图
create materialized view mv_bill
TABLESPACE BILL --保存表空间
BUILD DEFERRED --延迟刷新不立即刷新,此建立初始视图一般没数据
refresh fast --快速刷新(只刷新变更数据)
with rowid --根据rowid刷新(默认是主键)
On demand --按照指定方式刷新(定时刷新)
start with to_date('2013-10-10 20:00:00','YYYY-MM-DD HH24:MI:SS') next sysdate+1/48
as
select id,user_id,amount from bill where state='pay';
假设mv_bill物化视图保存的是银行网上转账的用户账户金额,我们都知道在网上转账需要第二天0点余额才进行刷新,实际上我们的交易已经成功,记录在bill表中,而我们账户的余额提现在mv_core_bill中,每天10点的视图刷新后,那么钱就到账了。这只是一个可能的简单例子,下面需要介绍物化视图的参数来合理应用这项技术。
三、物价视图的参数
1、创建方式(Build Methods):Build Immediate 和Build Deferred两种,Build Immediate 指创建后立即生成数据。Build Deferred指在下一次刷新时生成数据。
2、查询重写(Query Rewrite):Enable Query Rewrite和Disable Query Rewrite两种。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,直接从物化视图中读取数据。默认为Disable Query Rewrite。
3、刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:On Demand和On Commit。On Demand指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新。On Commit指物化视图在对基表的DML操作提交的同时进行刷新。刷新的方法有四种:Fast 、Complete 、Force和Never。Fast 刷新采用增量刷新,只刷新自上次刷新以后进行的修改。Complete 刷新对物化视图进行截断再进行完全的刷新。如果选择Force方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用Complete 的方式。Never指物化视图不进行任何刷新。默认值是Force On Demand。
4、物化视图日志:如果需要进行快速刷新,则需要建立物化视图日志。物化视图日志根据不同物化视图的快速刷新的需要,可以建立为RowID或Primary Key类型的。还可以选择是否包括Sequence、Including New Values以及指定列的列表。
可以指明on prebuild Table语句将物化视图建立在一个已经存在的表上。这种情况下,物化视图和表必须同名。当删除物化视图时,不会删除同名的表。这种物化视图的查询重写要求参数Query_Rewrite_integerity必须设置为 trusted或者stale_tolerated。(可以用于不停机的大量数据迁移,涉及一个实验)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29076828/viewspace-1196314/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29076828/viewspace-1196314/