全部产品
Search
文档中心

云数据库 SelectDB 版:物化视图概览

更新时间:Apr 24, 2026

物化视图(Materialized View)是一种预先计算并存储查询结果的数据库对象,能够显著提升复杂查询的性能。SelectDB提供同步物化视图和异步物化视图两类,分别适用于不同的业务场景。

使用场景

物化视图主要适用于以下三类场景:

  • 查询加速:对于包含复杂聚合、多表JOIN的高频查询,预先将计算结果物化存储,查询时直接读取物化结果,避免重复计算,大幅降低查询延迟。

  • 轻量ETL(数据加工):物化视图可以作为轻量级的ETL工具,对原始数据进行预聚合、转换,为下游报表或分析提供加工后的数据层,实现数仓分层建设。

  • 湖仓一体加速:对于存储在数据湖(如Hive、Iceberg等)中的外部数据,通过异步物化视图将常用查询结果缓存到SelectDB本地存储,利用SelectDB的高性能引擎加速数据湖查询。

物化视图分类

SelectDB提供两类物化视图,分别适用于不同的使用场景:

同步物化视图

同步物化视图(Sync Materialized View)在基表数据写入时实时同步更新,保证物化视图数据与基表数据强一致。其特点如下:

  • 实时一致性:基表的每次写入操作都会同步更新物化视图,查询结果始终与基表保持一致。

  • 仅支持单表:同步物化视图只能基于单张基表创建,不支持多表JOIN。

  • 自动透明改写:查询优化器可以自动识别并使用同步物化视图加速查询,无需修改SQL语句。

  • 适用场景:对数据实时性要求高的聚合加速查询,如实时大屏、在线报表等。

异步物化视图

异步物化视图(Async Materialized View)采用异步刷新机制,通过刷新方式(全量刷新或分区增量刷新)和触发方式(手动、定时或提交触发)的灵活组合,满足不同业务场景的数据时效性需求。其特点如下:

  • 支持多表JOIN:异步物化视图可以基于多张表(包括内表和外表)创建,支持复杂的JOIN查询预计算。

  • 灵活刷新策略:支持手动刷新(ON MANUAL)、定时刷新(ON SCHEDULE)和提交触发刷新(ON COMMIT)三种触发方式,可根据数据时效性需求灵活配置。

  • 湖仓一体支持:支持基于Hive、Iceberg等外部数据源创建物化视图,加速数据湖查询。

  • 透明改写:查询优化器支持基于SPJG(SELECT-PROJECT-JOIN-GROUP-BY)算法的透明改写,自动将原始查询路由到物化视图,无需修改业务SQL。

  • 适用场景:对数据时效性要求相对宽松(T+1级别)、查询复杂度高的分析场景,如数仓分层、多维度报表等。

同步与异步物化视图对比

对比维度

同步物化视图

异步物化视图

数据一致性

强一致(实时同步)

最终一致(异步刷新)

支持的基表数量

仅单表

多表(含JOIN)

外表支持

不支持

支持(Hive、Iceberg等)

刷新方式

写时同步更新

全量刷新(COMPLETE)或分区增量刷新(AUTO)

触发方式

自动(写入时同步触发)

手动(ON MANUAL)/ 定时(ON SCHEDULE)/ 提交触发(ON COMMIT)

透明改写

支持

支持(SPJG算法)

适用场景

实时性要求高、单表聚合加速

T+1分析、多表JOIN预计算、湖仓加速

异步物化视图的刷新机制

异步物化视图的刷新由两个独立维度决定:刷新方式(每次刷新的范围)和触发方式(何时触发刷新)。两者可以自由组合,在创建物化视图时通过REFRESH子句指定。

刷新方式(refresh_method)

刷新方式决定每次刷新时的数据范围:

刷新方式

刷新范围

说明

全量刷新(COMPLETE)

全部数据

每次刷新时重新计算物化视图定义SQL涉及的所有数据并完整写入。适用于非分区表或需要完全重建数据的场景。

分区增量刷新(AUTO)

变化的分区

仅刷新自上次刷新后数据发生变化的分区,刷新开销低。如果系统无法感知分区变化,则自动退化为全量刷新。适合分区表场景。

触发方式(refresh_trigger)

触发方式决定何时启动刷新任务。以下三种触发方式均可与上述任意刷新方式组合使用:

触发方式

触发时机

说明

适用场景

手动触发(ON MANUAL)

用户手动执行

通过REFRESH MATERIALIZED VIEW语句手动触发刷新

需要精确控制刷新时机的场景

定时触发(ON SCHEDULE)

按设定的时间间隔

按指定的时间间隔(分钟、小时、天等)自动触发刷新

周期性数据更新的场景,如每日报表

提交触发(ON COMMIT)

基表数据变更后

基表数据提交后自动触发物化视图刷新,数据延迟最低

基表变更频率不高且对数据新鲜度要求较高的场景

说明

刷新方式和触发方式是两个独立的维度。例如,您可以配置"全量刷新 + 定时触发"(每天凌晨全量重建),也可以配置"分区增量刷新 + 提交触发"(基表变更后仅刷新受影响的分区)。