Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
优化程序使用视图匹配算法来确定实例化视图是否可以用于满足某个查询。该确定过程涉及一个查询评估步骤和一个实例化视图评估步骤。
在查询评估过程中,视图匹配算法将对查询进行检查。如果符合以下任一条件,则不使用实例化视图来处理查询。
查询所引用的所有表均可更新。
优化程序不会为固有可更新或在可更新游标中显式声明的 SELECT 语句考虑实例化视图。如果使用 Interactive SQL(缺省情况下会为 SELECT 语句使用可更新的游标),就会发生这种情况。
语句属于使用优化程序跳过的简单 DML 语句,且经过启发式优化。但可以使用 OPTION 子句的 FORCE OPTIMIZATION 选项来强制对任何 SELECT 语句执行基于开销的优化。
对于包含在存储过程和用户定义函数中的查询,已高速缓存查询的执行计划。数据库服务器可能会高速缓存这些查询的执行计划,以使它们可以被重新使用。对于这类查询,查询执行计划将在执行之后进行高速缓存。下次执行此查询时,会对计划进行检索,执行阶段之前的所有阶段都会被跳过。
如果实例化视图的定义满足以下条件,则优化程序会将其包括在视图匹配算法将要检查的一组实例化视图中。
只包含一个查询块
只包含一个 FROM 子句
不包含任何以下构造或规范:
(可选)如果 HAVING 子句不包含子选择或子查询,则包含 GROUP BY 子句和 HAVING 子句。
除满足视图定义条件外,还需满足下列条件:
必须已启用实例化视图供数据库服务器使用
必须已启用实例化视图以在优化中使用
必须已初始化实例化试图(填入了数据)
用于创建实例化视图的一些重要选项的值必须与执行查询的连接选项匹配
实例化视图的上次刷新没有超过为数据库选项 materialized_view_optimization 设置的失效阈值
如果实例化视图满足上述条件,并且也满足全部或部分查询,则视图匹配算法会将该实例化视图包括在为优化的枚举阶段生成的建议中,此阶段将基于开销找到最佳计划。然而,这并不表示最后会在最终的执行计划中使用该实例化视图。例如,如果经过计算认为不使用看起来适合于计算查询结果的实例化视图的另一个访问计划成本更低一些,那么仍有可能不使用该实例化视图。