物化视图概览

更新时间:
复制 MD 格式

物化视图把查询结果预先计算并存储下来,后续查询直接读取已存储的结果,无需每次重新执行原始查询。PolarDB PostgreSQL版提供普通物化视图、增量物化视图(DIMV)、分区物化视图、增量分区物化视图和实时物化视图五种类型,您可以综合刷新代价、数据新鲜度、对查询定义与基表的限制以及对基表写入的影响选择合适的类型。

概述

物化视图把一条查询的结果预先计算并存储下来,之后的查询直接读取存储好的结果,而不必每次重新执行原始查询。对于聚合、多表连接等代价高昂的分析型查询,这是把秒级、分钟级的查询压缩到毫秒级最直接的手段。

代价是物化视图中的数据不会随基表自动变化,需要通过刷新来追上基表。PolarDB PostgreSQL版提供的几种物化视图,本质上是在刷新代价、数据新鲜度、对查询定义与基表的限制、对基表写入的影响这几个维度之间做不同的取舍。

物化视图体系

PolarDB PostgreSQL版的物化视图体系提供全量、分区、增量三类物化视图和与之配套的多级刷新策略,覆盖从秒级准实时到T+1的全谱系时效需求:

  • 增量刷新:只计算基表的变更量,不重算未变化的数据。变更通过物化视图日志(Materialized View Log,简称mlog)记录,对基表写入的额外开销与多维护一个索引相当(通常低于5%),秒级刷新即可支撑准实时报表。按变更应用的时机,又分为在语句结束时同步维护的实时物化视图,和先记入mlog、在刷新时异步应用的增量物化视图(DIMV)。

  • 分区刷新:分区物化视图基于分区基表自动识别发生变化的分区,只刷新这些分区,并支持按时间维度逐级上卷(如日分区上卷为月)。单次刷新的耗时不随历史数据累积而增长,相比全量重算可节省90%以上的计算资源;每个分区的刷新同样可以交给列存引擎执行(use_imci)。与DIMV组合成的增量分区物化视图进一步把分区内的刷新也变成增量,并可冻结长期不变的历史分区。

  • 全量刷新:普通物化视图对查询定义没有任何限制。刷新时的定义查询可以交给列存索引(IMCI)执行,典型分析型查询的刷新速度可提升30~100倍;同时支持刷新期间不阻塞读。

此外,任何一种物化视图上都可以再创建行存或列存二级索引,把复杂的分析查询固化为TP级的高并发点查。

物化视图类型一览

下表从刷新方式、数据新鲜度、对查询定义的限制、对基表的要求与写入影响和创建方式五个维度对比五种物化视图:

类型

刷新方式

数据新鲜度

对查询定义的限制

对基表的要求与写入影响

创建方式

普通物化视图

手动或定时全量重算

取决于刷新频率

无,任何查询都可以物化

无要求,写入无影响

CREATE MATERIALIZED VIEW

增量物化视图(DIMV)

mlog记录变更,按需或由后台worker异步增量刷新

秒级,取决于刷新间隔

支持子查询、窗口函数、任意聚合、部分外连接,可嵌套

基表需有主键(或ROWID);写入时多一次mlog记录,开销与维护一个索引相当

CREATE MATERIALIZED VIEW ... REFRESH FAST ON DEMAND

分区物化视图

版本追踪,仅全量重算发生变化的分区

取决于刷新频率

分区键须在GROUP BY中,分区表不能出现在子查询等位置

基表须为单列RANGE分区表,写入无影响

CALL polar_matview.create_partition_mv(...)

增量分区物化视图

分区裁剪+分区内异步增量刷新,历史分区可冻结

秒级,取决于刷新间隔

同时满足分区物化视图与DIMV的限制

同时满足分区物化视图与DIMV对基表的要求;写入开销同DIMV

CALL polar_matview.create_partition_mv(..., use_dimv => TRUE)

实时物化视图

基表DML语句结束时同步增量维护

始终与基表一致

与增量物化视图相同,但不支持嵌套

对基表写入性能有较大影响,适合读多写少的场景

CREATE MATERIALIZED VIEW ... REFRESH FAST ON COMMIT

额外说明:

  • 命名:实时物化视图与增量物化视图都采用增量维护,对查询定义的限制也相同,区别在于变更应用的时机。实时物化视图在写入语句结束时同步更新(ON COMMIT);增量物化视图把变更先记入mlog,在刷新时异步应用(ON DEMAND)。前者换来与基表严格一致,后者换来对写入路径更小的影响。此外,实时物化视图不支持嵌套,因此DIMV中依赖自动嵌套才能支持的查询形式在实时物化视图上不可用。

  • 扩展依赖:除普通物化视图外,其余四种类型都需要polar_ivm扩展;增量物化视图与增量分区物化视图目前仅在PostgreSQL 14上提供。

  • 版本要求:各类型物化视图的内核小版本要求,以对应文档“适用范围”章节标注的版本标签为准。