GBase 8c
运维管理
文章

普通视图和物化视图的主要区别是什么?当基表数据变化时,两者的表现有何不同?

发表于2026-03-11 10:12:309次浏览2个评论

一、主要区别

特性普通视图 (View)

物化视图 (Materialized View)

 

物理存储

不存储数据。数据库中仅保存视图的定义(即查询语句)。

 

实际存储数据。将查询结果以“类表”的形式持久化存储在磁盘中。
数据更新数据实时动态生成。每次查询视图时,都会重新执行其定义的查询语句。数据静态存储。创建后数据即固定,不会自动随基表变化而更新。
更新机制无需更新,总是反映基表的最新状态。需要手动或定时执行 REFRESH 命令来从基表重新获取数据并更新存储的结果。
主要用途简化复杂查询、实现逻辑数据抽象、增强数据安全(权限控制)。提升查询性能。对于复杂且耗时的查询,将结果预先计算并存储,后续查询可直接读取,避免重复计算。

二、当基表数据变化时,两者的表现

普通视图

表现:查询出的数据会随之改变。
原因:因为普通视图不存储数据,每次查询都相当于直接对当前基表执行一次SQL查询。因此,基表的任何增、删、改操作,都会立即在后续对视图的查询结果中反映出来。
PS:"若基本表中的数据发生变化,从视图中查询出的数据也随之改变。”

物化视图

表现:查询出的数据不会自动随之改变。
原因:物化视图存储的是创建或最后一次刷新时刻的基表数据快照。在未执行刷新操作前,即使基表数据已经更新,查询物化视图得到的仍然是旧数据。
更新方式:必须显式执行 REFRESH MATERIALIZED VIEW [视图名]; 命令后,物化视图才会从基表重新拉取最新数据并更新其存储内容,此后查询才能看到变化。
PS:向基表tab_1插入新数据后,查询物化视图mv1仍只看到旧数据;执行REFRESH命令后,再次查询才能看到新数据。解析中也强调:“物化视图无法像普通表那样进行数据更新,需要使用 REFRESH 从基表获取更新数据。”

总结
核心区别在于数据是否物化存储。普通视图是“虚拟表”,提供实时数据窗口;物化视图是“快照表”,用存储空间换取查询速度,但数据存在延迟,需要手动维护更新。

评论

登录后才可以发表评论
GBase用户47954发表于 4个月前
感谢作者的精彩分享!
GBase用户51883发表于 2个月前
继续努力