物化视图
物化视图是数仓领域的核心特性之一。不同于逻辑视图(view),物化视图(materialized view)会持久化视图的查询结果,可用于加速分析,并能简化ETL,适用于多种场景,例如报表类业务,大屏展示需求,来自BI工具的查询等等。
什么是物化视图
物化视图是AnalyticDB for MySQL内表,存储了单表查询或多表查询的预计算结果。查询物化视图时,数据库直接返回预先计算好的结果,无需访问基表,从而显著提高查询响应速度。
仅XIHE计算引擎能够创建物化视图。不支持使用Spark引擎创建物化视图。
不仅如此,即使用户直接查询基表,物化视图也能提升查询性能。当检测到用户查询与物化视图中的查询完全或部分匹配时,AnalyticDB for MySQL会自动将对基表的查询改写为对物化视图的查询,利用预计算结果,实现查询加速。
但需要注意的是,物化视图反映的是最近一次刷新后的数据状态,可能不是基表的最新数据。物化视图也不会在每次查询时自动刷新数据。您可以设置定时自动刷新、基表覆盖写时自动刷新,或者手动刷新,确保物化视图数据的及时性和准确性。
下表介绍了物化视图支持的特性。
刷新策略 | 基表类型 | 刷新触发机制 | 查询类型 | 查询改写 |
刷新策略 | 基表类型 | 刷新触发机制 | 查询类型 | 查询改写 |
全量刷新 |
|
| 任意查询 | 支持开启查询改写(V3.1.4) |
增量刷新(V3.1.9.0) |
| 定时自动刷新 |
|
什么场景适合创建物化视图
物化视图非常适合加速需要定期或多次重复执行的查询。
多个查询包含相同的子查询
如果多个查询都包含相同的子查询,且子查询中使用了聚合函数比较消耗计算资源,可以考虑创建物化视图,提前计算并存储子查询的所有结果。当查询包含该子查询时,AnalyticDB for MySQL的查询改写功能将自动查询物化视图,实现加快查询速度、减少计算资源消耗的效果。
定期的多表Join
如果有定期Join多张表的需求,可以为这些表的Join操作创建一个物化视图。物化视图会提前计算并存储Join的结果,并定期自动刷新数据。当查询包含这些表的Join操作时,将直接从物化视图返回结果,无需重新执行多表Join,因此可大幅提高查询响应速度。
数据湖查询加速
当用户对外表发起查询,AnalyticDB for MySQL可以自动将外表查询改写为对物化视图的查询,加速数据湖分析。
物化视图的重要特性变更记录
3.1.4及以上版本:支持开启物化视图查询改写。
3.1.4.7及以上版本:
支持OR REPLACE关键字,当存在同名的物化视图时,删除原有物化视图并创建新的物化视图。
物化视图的数量上限,从8个增加到64个。
3.1.9.0及以上版本:支持增量刷新的单表物化视图。
3.1.9.3及以上版本:企业版、基础版和湖仓版支持弹性物化视图,即使用Job型资源组创建并刷新物化视图。
3.2.0.0及以上版本:支持增量刷新的多表物化视图。
3.2.2.1及以上版本:增量刷新的物化视图,query_body支持MAX、MIN、AVG、APPROX_DISTINCT和COUNT(DISTINCT)函数。
3.2.3.0及以上版本:增量刷新的物化视图,基表支持分区表。
3.2.3.1及以上版本:增量刷新的物化视图,基表支持INSERT OVERWRITE和TRUNCATE操作。
您可以对物化视图执行以下操作:
关于使用物化视图的客户案例,请参见物化视图客户案例。
- 本页导读 (1)
- 什么是物化视图
- 什么场景适合创建物化视图
- 物化视图的重要特性变更记录