基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
物化视图
更新时间:2026-07-15 20:42:45
概述
物化视图与传统的视图不同,因为它实际上存储了查询结果的数据。简而言之,当您创建一个物化视图时,数据库执行与之关联的 SQL 查询,并将结果集存储在磁盘上。它通过预计算和存储视图的查询结果,减少实时计算,从而提升查询性能并简化复杂查询逻辑,常用于快速报表生成和数据分析场景。
本篇文档将向您介绍物化视图的原理,包括全量刷新和增量刷新的实现原理,以及这两种刷新机制在数据更新中的不同;同时也介绍实时物化视图的实现原理,并阐述它如何保证更新及时性、查询结果的实时性和准确性。
全量刷新物化视图原理
全量刷新策略在每次更新时清除物化视图中现有的所有数据,并将最新的查询结果集重新插入。每次刷新时清除的隐藏容器表的数据,当隐藏容器表成功插入新的查询结果集时,再与容器表交换,交换成功后查询物化视图结果才是刷新后的结果。

增量刷新物化视图原理
增量刷新的实现依赖于物化视图日志。物化视图日志是一种用于跟踪物化视图基表(即被物化视图引用的表)数据变化的结构,记录自上次刷新以来基表中发生的所有变化,包括插入、更新和删除。
物化视图日志只处理变化的数据,记录变化,快速增量更新物化视图,保证物化视图与基表数据一致。
增量刷新策略更为高效,它仅处理自上次更新以来变化的数据,并将这些差异应用到物化视图中。所有增量数据变化会被记录在物化视图日志中,详尽列出了所有被修改行的旧值与新值,确保了数据的准确性与及时性。

如上图所示,当 DML 操作(如 INSERT、UPDATE)作用于基表时,DAS 机制保证同时更新基表和物化视图日志。后台维护任务会定期将物化视图日志中的增量变更应用到物化视图。物化视图日志中的部分数据一旦被刷新到物化视图,将由删除模块清除。此时,查询操作将同时访问物化视图和物化视图日志中尚未刷新的数据,合并这些信息后返回最新的结果集给用户。
实时物化视图实现原理

OceanBase 支持实时物化视图,其与非实时物化视图的区别是:非实时物化视图只从 MView 中查询数据,而实时物化视图除了查询 MView 中的数据,还会访问基表数据的变更,这些变更被记录在物化视图日志(Mlog)中。实时物化视图在查询执行时能够在线计算 MView 和 Mlog 中的数据,从而返回实时的物化视图结果。
实时物化视图与增量刷新之间密切相关,实时物化视图通过不断查询物化视图日志,能够快速捕捉基表数据的最新变化,使得物化视图呈现出实时更新的状态。