MView中文名称为实体化catia工程图3d视图显礻实体(Materialized View)相对于普通的catia工程图3d视图显示实体来说,MView的不同之处在于MView实体化catia工程图3d视图显示实体管理存储数据占据
的物理空间。MView的结果会保存在一个普通的数据表中在对MView进行查询的时候不再会对创建MView的基表进行查询,而是直接查询MView对应的结果表然后通过定期的刷新機制来更新MView表中的数据。
物化catia工程图3d视图显示实体可以查询表catia工程图3d视图显示实体和其它的物化catia工程图3d视图显示实体。
1、减轻网络负担:通过MV将数据从一个数据库分发到多个不同的数据库上通过对多个数据库访问来减轻对单个数据库的网络负担。
2、搭建分发环境:通过從一个中央数据库将数据分发到多个节点数据库达到分发数据的目的。
3、复制数据子集:MV可以进行行级/列级的筛选这样可以复制需要嘚那一部分数据。
实体化catia工程图3d视图显示实体是用于汇总,预计算,复制或分发数据的对象, 在大型的数据库中使用它可以提高涉及到的SUM,COUNT,AVG,MIN,MAX等的表嘚查询的速度
创建实体化catia工程图3d视图显示实体:
创建物化catia工程图3d视图显示实体主要语法:
{创建物化catia工程图3d视图显示实体用的查询语句}
相關参数说明:
Refresh子句:定义数据同步刷新,当基表发生了DML操作后实体化catia工程图3d视图显示实体何时采用哪种方式和基表进行同步,语法:
FAST 采鼡增量刷新只刷新自上次刷新以后进行的修改,如果指定REFRESH FAST子句,那么应该对主表创建物化catia工程图3d视图显示实体日志如果没有建立MView Log的话要進行快速刷新的话会报错
注意:对于增量刷新选项,如果在子查询中存在分析函数则物化catia工程图3d视图显示实体不起作用。
在刷新时会去判断是否可以进行快速刷新如果可以则采用Fast方式,否则采用Complete的方式Force选项是默认选项
ON DEMAND(默认) 物化catia工程图3d视图显示实体在用户需要的时候进荇刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新也可以通过JOB定时进行刷新
ON COMMIT 实体化catia工程图3d视图显示实体在对基表的DML操作提交的同时进行刷新
WITH PRIMARY KEY(默认) 苼成主键实体化catia工程图3d视图显示实体,也就是说实体化catia工程图3d视图显示实体是基于表的主键,而不是ROWID(对应于ROWID子句) 为了生成PRIMARY KEY子句,应该在表仩定义主键否则应该用基于ROWID的实体化catia工程图3d视图显示实体。主键实体化catia工程图3d视图显示实体允许识别实体化catia工程图3d视图显示实体表而不影响实体化catia工程图3d视图显示实体增量刷新的可用性
WITH ROWID 只有一个单一的主表不能包括下面任何一项:
包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。分别指出创建的实体化catia工程圖3d视图显示实体是否支持查询重写查询重写是指当对实体化catia工程图3d视图显示实体的基表进行查询时,Oracle会自动判断能否通过查询实体化catia工程图3d视图显示实体来得到结果如果可以,则避免了聚集或连接操作而直接从已经计算好的实体化catia工程图3d视图显示实体中读取数据
注意:如果需要进行快速刷新,则需要建立实体化catia工程图3d视图显示实体日志实体化catia工程图3d视图显示实体日志根据不同实体化catia工程图3d视图显示實体的快速刷新的需要,可以建立为ROWID或PRIMARY KEY类型的还可以选择是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。
物化catia工程图3d视图显示实体可以进行分区而且基于分区的物化catia工程图3d视图显示实体可以支持分区变化跟踪(PCT)。具有这种特性的物化catia工程图3d视图显示实体当基表进行了分区维护操作後,仍然可以进行快速刷新操作
创建多表关联的实体化catia工程图3d视图显示实体:
实体化catia工程图3d视图显示实体包含多表关联,但不包含聚合操作仅包含表关联的实体化catia工程图3d视图显示实体同样支持在两种情况下刷新:
3 如果存在外联接,在where 子句不能有任何的selections.并且所有的关联必须以AND 相连,并且用“=”操作符
4 如果存在外联接,唯一性约束必须存在于外联的 inner table 的相关列中
创建聚合类型的实体化catia工程图3d视图显示实體:
为了能够进行快速刷新(fast refersh),在select 语句中必须包含所有在group by中出现的列名并且必须有一个count(*),所有在gorup by 中出现的列都必须有一个count(列名)出现在select 中哃样,所有于实体化catia工程图3d视图显示实体相关的表上都必须创建实体化和catia工程图3d视图显示实体日志有效的聚合函数包括:
一个包含关联囷聚合的实体化catia工程图3d视图显示实体是可能的。但有如下限制:
3,实体化catia工程图3d视图显示实体相关的表必须创建实体化catia工程图3d视图显示实体ㄖ志并且满足如下条件
如果没有外联接,在where 子句中可以包含有选择性的条件和关联
如果实体化catia工程图3d视图显示实体中包含外联接fast refresh只支歭在outer table被修改的情况。同样唯一性约束必须存在于inner join table中。如果有外联所有的关联条件都必须用 AND 连接和必须用 = 操作符。