物化视图

更新时间:2025-02-28 07:53:19

物化视图是数仓领域的核心特性之一。不同于逻辑视图(view),物化视图(materialized view)会持久化视图的查询结果,可用于加速分析,并能简化ETL,适用于多种场景,例如报表类业务,大屏展示需求,来自BI工具的查询等等。

什么是物化视图

物化视图是AnalyticDB for MySQL内表,存储了单表查询或多表查询的预计算结果。查询物化视图时,数据库直接返回预先计算好的结果,无需访问基表,从而显著提高查询响应速度。

XIHE计算引擎能够创建物化视图。不支持使用Spark引擎创建物化视图。

不仅如此,即使用户直接查询基表,物化视图也能提升查询性能。当检测到用户查询与物化视图中的查询完全或部分匹配时,AnalyticDB for MySQL会自动将对基表的查询改写为对物化视图的查询,利用预计算结果,实现查询加速。

但需要注意的是,物化视图反映的是最近一次刷新后的数据状态,可能不是基表的最新数据。物化视图也不会在每次查询时自动刷新数据。您可以设置定时自动刷新、基表覆盖写时自动刷新,或者手动刷新,确保物化视图数据的及时性和准确性。

下表介绍了物化视图支持的特性。

刷新策略

基表类型

刷新触发机制

查询类型

查询改写

刷新策略

基表类型

刷新触发机制

查询类型

查询改写

全量刷新

  • AnalyticDB for MySQL内表,包括分区表、非分区表和复制表

  • AnalyticDB for MySQL外表

  • 物化视图

  • 视图

  • 定时自动刷新

  • 基表覆盖写时自动刷新

  • 手动刷新

任意查询

支持开启查询改写(V3.1.4)

增量刷新(V3.1.9.0)

  • AnalyticDB for MySQL内表,包括分区表(V3.2.3.0)和非分区表

定时自动刷新

  • 单表查询(V3.1.9.0)

  • 多表Join查询(V3.2.1.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_DISTINCTCOUNT(DISTINCT)函数。

  • 3.2.3.0及以上版本:增量刷新的物化视图,基表支持分区表。

  • 3.2.3.1及以上版本:增量刷新的物化视图,基表支持INSERT OVERWRITETRUNCATE操作。

您可以对物化视图执行以下操作:

关于使用物化视图的客户案例,请参见物化视图客户案例

  • 本页导读 (1)
  • 什么是物化视图
  • 什么场景适合创建物化视图
  • 物化视图的重要特性变更记录