物化视图(Materialized View):是一种特殊的物理表,本质是预计算,是多个计算过程之间的联系建立。从数据组织层面优化数据访问效率,即把某些耗时的操作(例如JOIN、AGGREGATE)的结果保存到物理存储上,可以像表一样被访问,以便在后续查询时直接复用,最终达到加速查询的目的,即空间换时间。而普通视图(View)仅是简化用户的查询定义,不存储实际结果数据。
物化视图使用存在一定门槛,提高查询性能的同时也引入了相应的成本:
因此,物化视图并不适合所有场景,使用物化视图条件:提速收益 > 存储成本 + 计算成本。
物化视图适合场景:
使用场景示例:
视图改写常用的方式:
Calcite 物化视图查询改写支持两种方式:
Calcite物化视图的结构改写逻辑主要基于Goldstein 和 Larson 的“Optimizing Queries Using Materialized Views: A Practical, Scalable Solution”实现(Microsoft SQL Server的改写方案),是一种SPJG(join-select-project-groupBy)重写算法。
SPJ(join-select-project)视图改写条件:
Calcite MaterializedViewRule 实现结构改写规则,可参考单测 MaterializedViewRelOptRulesTest
Lattice(格):是一个数学概念,表示数学上的一种集合,非空有限子集都有一个上确界(并)和一个下确界(交)的偏序结合。Calcite针对物化视图对Lattice进行扩展,根据用户定义的关联和聚合要求,划分出多个物化视图来适应不同类别的查询,支持自动划分物化视图。 Calcite中Lattice定义功能:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。