cpu代表什么意思 pu代表什么意思( 五 )


基于语法的改写基于规则的改写基于结构的改写基于语法的改写
文本匹配或者语法匹配是最简单的改写 ***  , 将查询的文本与物化视图的文本或语法树进行比较 , 完全匹配可以进行改写 。这种改写只能匹配完整的查询语句或子语句 , 细微的变化就会导致查询无法改写 , 适用的范围很小 。基于语法的改写虽然简单 , 但是效率很高 , 改写的成本可以忽略不计 。
基于规则的改写
【cpu代表什么意思pu代表什么意思】基于规则的改写和其他优化器规则相同 , 针对不同 Pattern 的查询和视图编写不同的规则 , 寻找等价的替代关系树 。
最简单的一条规则就是直接比较子查询和视图的计划 , 如果相同就能改写 。高级的改写规则不需要物化视图等同于被替换的计划 , 会尝试计算补偿谓词 , 构建等价查询表达式 。例如 Join 改写 , 比较 Join 查询的子表达式是否和视图 Join 的某个子表达相同或者能否从中计算出来 , 每一个Join子表达式都存在映射关系 , 最后检查补偿表达式能否从视图中计算得到 。
基于规则的改写可以实现大量重写 , 实现也比较简单 , 改写匹配速度快 , 但是也存在局限性 。这种改写依赖转换规则来寻找等价关系 , 因此需要穷举所有可能的转换关系来实现复杂视图的重写 。一些复杂的视图不可能穷举所有的等价关系 , 例如存在很多的 Join 联接或者复杂的 Project 关系 , 基于规则的改写适用的范围取决于规则的数量 。
基于结构的改写
基于结构的改写与基于规则的改写相反 , 通过提取查询中的特征 , 使用一套规则进行匹配改写 。优化器将查询表示为 SPJG 标准形式 (Join-Select-Project-GroupBy) , 提取查询中的 Join , Projects , Filters , Grouping 和 Aggregations 五种表达式 , 分别与物化视图对应的表达式进行匹配和改写 。
这个 *** 是由微软在 2001 年 SIGMOD 论文《Optimizing queries using materialized views: A practical, scalable solution》系统化的提出 。这种 *** 可以改写包含可以改写包含 Join , Filter , Project 的任意查询的 ***  , 运用一系列的步骤匹配并得到补偿表达式 。还可以进一步改写含有 Aggreagtion 的查询 , 在需要时添加 Aggregation 节点返回进一步汇总的结果 。
基于结构的改写很容易扩展 , 例如改写 Outer Join 和子查询等 , 可以完成几乎全部的改写 。但是搜索成本较高 , 尤其是在查询复杂 , 改写尝试次数很多的情况下 。
参考资料
Goldstein J, Larson P ?. Optimizing queries using materialized views: a practical, scalable solution[J]. ACM SIGMOD Record, 2001, 30(2): 331-342.Bello R G, Dias K, Downing A, et al. Materialized views in Oracle[C]//VLDB. 1998, 98: 24-27.Zhou J, Larson P A, Goldstein J, et al. Dynamic materialized views[C]//2007 IEEE 23rd International Conference on Data Engineering. IEEE, 2007: 526-535.Jindal A, Qiao S, Patel H, et al. Computation reuse in*** ytics job service at microsoft[C]//Proceedings of the 2018 International Conference on Management of Data. 2018: 191-203.Calcite: Materialized View.Oracle: Database Data Warehousing Guide: Advanced Query Rewrite for Materialized Views.Redshift: Automatic query rewriting to use materialized views.Snowflake: Creating and Working With Materialized Views.作者:阿里云数据库OLAP产品部 云曦
本文为阿里云原创内容 , 未经允许不得转载 。

推荐阅读