物化视图的刷新方式说明
物化视图可以选择三种不同的刷新方式,根据不同的需求,选择不同的刷新方式。
- Complete刷新:会删除表中的所有记录(如果是单表刷新,可能会采用Truncate的方式),然后根据物化视图中查询语句的定义重新生成物化视图。
- Fast刷新:采用增量刷新的机制,只将自上次刷新以后对基表进行的所有操作刷新到物化视图中。
- Force刷新:Oracle自动判断是否满足Fast刷新条件,如果满足则进行Fast刷新,否则进行Complete刷新。
不是所有的物化视图都可以进行Fast刷新,只有满足某些条件的物化视图才具有Fast刷新的能力。根据查询的不同,Fast刷新的限制条件也有所不同,下面是关于Fast刷新针对不同类型的物化视图的限制条件的总结。
-
1.所有类型的快速刷新物化视图都必须满足的条件:
- 物化视图不能包含对不确定表达式的引用,如 SYSDATE 和 ROWNUM;
- 物化视图不能包含对LONG和LONG RAW数据类型的引用。
-
2.针对只包含多表关联的物化视图的限制条件:
-
必须满足所有快速刷新物化视图都满足的条件;
-
不能包括GROUP BY语句或聚集操作;
-
如果在WHERE语句中包含外连接,那么唯一约束必须存在于连接中内表的连接列上;
-
如果不包含外连接,那么WHERE语句没有限制,如果包含外连接,那么WHERE语句中只能使用AND连接,并且只能使用“=”操作。
-
FROM语句列表中所有表的 ROWID 必须出现在SELECT语句的列表中。
-
FROM语句列表中的所有表必须建立基于 ROWID 类型的物化视图日志。
例如:
-- 1 建立一个可以成功快速刷新的例子,这个物化视图只包含连接: SQL> create materialized view log on dim_a with rowid; -- 物化视图日志已创建。 SQL> create materialized view log on dim_b with rowid; --
-