oracle 物化视图日常维护
一、参数
- optimizer_mode
优化器模式需要ALL_ROWS、FIRST_ROWS、CHOOSE之一
- query_rewrite_enabled
需要启用查询重写,TRUE
- query_rewrite_integrity
-
STALE_TOLERATED
- 当设置为 STALE_TOLERATED 时,优化器会使用包含既有新鲜数据又有陈旧数据的物化视图进行查询重写。
- 这意味着查询结果可能包含一些过期的数据,但这种情况是可以接受的。
-
TRUSTED
- 当设置为 TRUSTED 时,优化器会假设物化视图中的数据是正确的,并会使用这些数据进行查询重写。
- 这意味着优化器会完全信任物化视图中的数据,不会对其进行验证。
-
ENFORCED
- 当设置为 ENFORCED 时,这是默认值,优化器只会使用它确定包含新鲜数据的物化视图进行查询重写。
- 这意味着如果物化视图包含陈旧数据,优化器不会使用它进行查询重写。在这种情况下,用户必须确保验证数据仓库模式中的约束。
这个参数控制了优化器在使用物化视图进行查询重写时对数据准确性的要求。
二、物化视图是如何通过查询重写过程被重写
-
完整 SQL 文本匹配:
- 优化器会比较查询的 SELECT 子句 SQL 文本与物化视图定义查询的 SELECT 子句 SQL 文本。
- 如果完全匹配,则可以使用该物化视图进行查询重写。
-
部分 SQL 文本匹配:
- 如果完整 SQL 文本匹配失败,优化器会比较查询剩余部分(从 FROM 子句开始)的 SQL 文本与物化视图定义查询的剩余 SQL 文本。
- 如果部分匹配成功,也可以使用该物化视图进行查询重写。
-
一般查询重写方法:
- 如果完整和部分 SQL 文本匹配都失败,优化器会使用一般的查询重写方法。
- 优化器会测试物化视图的数据充分性、连接兼容性、分组兼容性和聚合兼容性,即使物化视图只包含部分所需数据或包含超出所需的数据。
- 只要满足这些兼容性要求,优化器就可以使用该物化视图进行查询重写。
总之,优化器会先尝试完整和部分 SQL 文本匹配,如果失败则使用更复杂的一般查询重写方法来判断是否可以使用物化视图。
三、创建和维护
- 创建
SQL> create table t1 as select * from dba_objects;
Table created.
create materialized view mv_orcl_t1
2 build immediate
3 refresh force
4 on demand
5 start with sysdate
next to_date(concat(to_char(sysdate+1,'dd-mm-yyyy'),'10:18:00'),'dd-mm-yyyy
hh24:mi:ss')
8 as
9 select * from t1;
Materialized view created.