0、物化视图简介
物化视图的特点:
(1) 物化视图在某种意义上说就是一个物理表(而且不仅仅是一个物理表),这通过其可以被user_tables查询出来,而得到佐证;
(2) 物化视图也是一种段(segment),所以其有自己的物理存储属性;
(3) 物化视图会占用数据库磁盘空间,这点从user_segment的查询结果,可以得到佐证;
****化视图由于是物理真实存在的,故可以创建索引,创建方式和对普通表创建方式相同
****物化视图把他的物理结构存储在自己的段中,该段可以被索引和分区
物化视图可以查询表,视图和其它的物化视图
如果你想修改本地副本,必须用高级复制的功能
物化视图的作用:
物化视图允许你在本地维护远程数据的副本,这些副本是只读的
物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;
物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL 语句的正确性和有效性
当基表发生变化时,物化视图也应当刷新。
1、创建物化视图
create materialized view [view_name]
refresh [fast|complete|force]
[ on [commit|demand] | start with (start_time) next (next_time) ]
as {创建物化视图用的查询语句}
例子:
create materialized view V_AI_DEDUCTION_FEE_material
tablespace users 指定物化视图存放的 表空间
build immediate 指定何时生成数据 IMMEDIATE 创建后立刻生成数据
DEFERRED 需要时生成数据
refresh fast 指定视图同步方式,也可以通过JOB方式进行定时刷新,可以到表USER_JOBS中查看JOB的信息
on demand
ON COMMIT 基表DML提交的同时进行刷新
start with trunc(SYSDATE)+ 1 NEXT trunc(SYSDATE)+1 开始刷新时间,刷新间隔
with rowid 只能有一个单一主表,不能包括distinct,聚合函数,关联
primary key 基于表的主键
disable qry rewrite 是否支持查询重写(对基表查询时,判断能否通过物化视图查询)
as
查询语句
2、修改物化视图语句
ALTER MATERIALIZED VIEW V_AI_DEDUCTION_FEE_material
REFRESH FORCE
ON DEMAND
START WITH SYSDATE
3、 刷新物化视图
refresh [fast|complete|force]
FAST-F 增量刷新方式,仅刷新上次刷新后刷新的数据
COMPLETE-C 全量刷新方式
FORCE-? 判断是否增量,否则全量
NEVER 不进行刷新
3.0 创建时指定视图数据
Build immediate一共有三个选项
(1) Build immediate:建立物化视图,并马上填充视图数据。
(2) Build deferred:只建立物化视图,在第一次刷新之间不填充数据。
(3) No prebuilt table,使用事先已存在的,已含有视图定义中有现有数据的表,而不是建立一个新结构来保存数据。如果是refresh fast on commit或refresh complete on commit创建的,则在基础表提交的时候都会得到刷新。启用或禁用物化视图,需要有query rewrite或global query rewrite权限。
3.1 on[commit|demand]—区别在于刷新方法的不同
on demand:在用户需要刷新的时候刷新,这里就需要用户自己动手去刷新数据了(也可以使用job定时刷新)
on commit:当主表中有数据提交的时候,立即刷新MV中的数据;
DBMS_MVIEW用于管理物化视图;
DBMS_REFRESH用于管理物化视图的刷新;
DBMS_OLAP用于确定物化视图是否能提高查询的性能。
dbms_mview.refresh(‘EMP_BY_DISTRICT’); ——刷新指定的物化视图SQL>execute dbms_mview.refresh_defresh_dependent(‘EMPLOYEE’); ——刷新利用了该表的所有物化视图SQL>execute dbms_mview.refresh_all_mviews; ——刷新该模式中,自上次刷新以来,未得到刷新的所有物化视图。
3.2 手动刷新物化视图
dbms_mview.refresh(
TAB=>'V_AI_DEDUCTION_FEE_material',
METHOD=>'COMPLETE',
PARALLELISM=>8
); --PARALLELISM并行控制参数
3.3 修改物化视图 刷新方式
alter materialized view V_AI_DEDUCTION_FEE_material
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');
4、删除物化视图
drop materialized view V_AI_DEDUCTION_FEE_material;
5、使用物化视图前的几个配置步骤
(1) 确定那些语句要创建物化视图。
(2) 决定是否要保持视图与基础表数据同步。
如果不同步,可选择如下三种刷新方式:
COMPLETE:刷新启动时,先truncate物化视图,再从基础表重新插入填充数据。
FAST:只刷新基础表上次刷新后改变的数据。使用视图的日志数据或ROWID完成。
FORCE:默认的方式。先使用FAST,不行就使用COMPLETE方式。
(3) 设置init.ora的参数:
JOB_QUEUE_PROCESSES,必须设置大于 1
QUERY_REWRITE_ENABLED,设置为TRUE时,允许动态重写查询。
QUERY_REWRITE_INTEGRITY,确定访问物化视图时数据一致性要遵守的程度。
OPTIMIZER_MODE,必须设置成CBO的某种方式。
使用一个物化视图,用户只需在基础表上拥有权限即可。