原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。
本文档面向数据库运维人员、架构师及社区技术爱好者,系统介绍 GBase 8c 数据库中普通视图与物化视图的核心原理、操作方法、特性差异及适用场景。内容结合 GBase 8c 分布式架构特性,清晰区分两类视图的使用边界,为数据库查询优化、性能提升与数据安全管控提供规范指引与实践参考。
1. 视图概述
视图是数据库中重要的对象之一,用于简化复杂查询、屏蔽数据细节、保障数据安全,提升数据管理与使用的效率。
GBase 8c 数据库作为一款企业级关系型数据库,提供了普通视图与物化视图两种核心视图类型,二者在实现原理、功能特性、适用场景上存在显著差异,对数据库性能优化与业务落地具有重要影响。
在数据库应用开发与运维过程中,随着业务复杂度的提升,数据查询需求日益复杂,多表关联、聚合统计、条件筛选等操作频繁出现,不仅增加了开发人员的查询语句编写难度,还可能导致查询效率低下,影响系统响应速度。视图作为一种虚拟的表结构,能够将复杂的查询逻辑封装起来,简化查询操作,同时实现数据隔离与权限控制,成为数据库优化与数据管理的重要工具。
2. 普通视图与物化视图定义
GBase 8c 数据库中的普通视图与物化视图,核心区别在于是否物理存储查询结果,二者的定义如下:
普通视图:又称虚拟视图,是由 SELECT 查询语句定义的虚拟表,数据库仅存储视图的查询逻辑,不存储任何实际数据。当用户查询普通视图时,数据库会实时执行视图背后的查询语句,从底层基表中获取数据并返回,视图的数据始终与底层基表保持一致。普通视图就像一个“窗口”,透过它可以看到数据库中用户感兴趣的数据及变化,自身不占用额外的磁盘存储空间。
物化视图(Materialized View):又称实体视图,是一种特殊的视图类型,它会将查询语句的执行结果物理存储在磁盘上,相当于一张“快照表”。与普通视图不同,物化视图不依赖实时执行查询语句,而是直接读取存储的查询结果,因此查询效率极高。但由于数据是物理存储的,当底层基表数据发生变化时,物化视图的数据不会自动同步,需要通过手动或定时刷新操作来更新,确保数据一致性。物化视图适用于查询频繁、更新较少的大数据量场景,核心作用是提升复杂查询的效率。
3. 普通视图的操作与特性
3.1 普通视图特性
1)无物理存储:普通视图仅存储查询语句的定义,不存储任何实际数据,所有数据均来自底层基表。
2)数据实时同步:由于普通视图不存储数据,每次查询视图时,都会实时执行背后的查询语句,从底层基表中获取最新数据。因此,当底层基表的数据发生插入、更新、删除等操作时,视图的数据会自动同步更新,无需人工干预,确保数据的实时一致性。
3)查询逻辑封装:普通视图将复杂的查询逻辑(如多表关联、聚合统计、条件筛选)封装起来,用户只需通过简单的 SELECT 语句查询视图,即可获得所需结果,无需关注底层的查询逻辑与表结构,简化了查询操作。
4)无刷新开销:由于普通视图不存储数据,无需进行刷新操作,不存在刷新带来的系统开销,适合底层基表更新频繁的场景。
3.2 普通视图操作
视图创建语句:
CREATE [ OR REPLACE ] [DEFINER = user] [ TEMP | TEMPORARY ] VIEW view_name [ ( column_name [, ...] ) ]
[ WITH ( {view_option_name [= view_option_value]} [, ... ] ) ]
AS query
[ WITH [ CASCADED | LOCAL ] CHECK OPTION ];
查询普通视图的操作与查询普通表完全一致,使用 SELECT 语句即可,数据库会自动执行视图背后的查询逻辑,返回最新数据。
修改普通视图主要通过 CREATE OR REPLACE VIEW 语句实现,用于更新视图的查询逻辑。
删除普通视图使用 DROP VIEW 语句,语法简单,删除后视图的定义被移除,不会影响底层基表的数据。
3.3 普通视图使用场景
1)复杂查询封装场景:当业务中存在大量多表关联、条件筛选等复杂查询,且这些查询被频繁使用时,可通过普通视图封装查询逻辑,简化开发流程,提升代码复用性。
2)数据安全与权限隔离场景:需要隐藏底层表敏感数据、控制用户数据访问范围时,可通过普通视图实现。
3)底层表结构频繁变化场景:当底层表结构需要频繁修改时,可通过普通视图提供统一的数据访问接口,避免修改应用程序中的查询语句,降低系统维护成本。
4)实时数据查询场景:对数据实时性要求较高,需要获取底层基表最新数据的场景,普通视图可实时同步底层数据,满足实时查询需求。
3.4 注意事项
1)避免过度使用复杂视图:若视图的查询逻辑过于复杂(如多层嵌套、多表关联、大量聚合操作),每次查询视图时都会执行复杂的查询语句,可能导致查询效率低下,尤其在大数据量场景下,需谨慎使用。
2)权限控制需精准:授予用户视图权限时,需根据业务需求精准分配,避免授予不必要的权限,防止数据泄露或误操作。
3)避免视图嵌套过深:多层视图嵌套会增加查询语句的执行复杂度,降低查询效率,建议尽量减少视图嵌套层数,最多不超过 3 层。
4. 物化视图的操作与特性
4.1 物化视图特性
1)物理存储数据:物化视图会将查询语句的执行结果物理存储在磁盘上,占用一定的磁盘存储空间,与普通表类似。这种物理存储方式使得物化视图无需每次查询时重新执行复杂的查询语句,可直接读取存储的结果,大幅提升查询效率。
2)查询效率极高:由于数据已预先计算并存储,查询物化视图时,数据库直接读取存储的结果集,无需执行多表关联、聚合统计等复杂操作,尤其适用于大数据量、复杂查询、查询频繁的场景。
3)数据需手动/定时刷新:物化视图的数据是静态的,当底层基表的数据发生插入、更新、删除等操作时,物化视图的数据不会自动同步,需要通过手动或定时刷新操作来更新,确保数据与底层基表一致。这是物化视图与普通视图的核心区别之一。
4)不支持 IUD 操作:完全刷新物化视图不支持插入、更新、删除操作,用户只能通过刷新操作更新物化视图的数据,若需修改物化视图的内容,需先修改底层基表,再执行刷新操作。
5)存储参数可配置:创建物化视图时,可指定存储参数,与普通表的存储配置类似,可根据业务需求灵活调整。
4.2 物化视图操作
视图创建语句:
CREATE [ INCREMENTAL ] MATERIALIZED VIEW table_name
[ (column_name [, ...] ) ]
[ TABLESPACE tablespace_name ]
AS query
物化视图刷新语句:
REFRESH [ INCREMENTAL ] MATERIALIZED VIEW name
查询物化视图:与查询普通表、普通视图一致,使用 SELECT 语句即可,直接读取存储的结果集,查询效率极高。
删除物化视图:
DROP MATERIALIZED VIEW IF EXISTS mv_department_teacher_count;
4.3 物化视图使用场景
1)大数据量复杂查询场景:当业务中存在大量多表关联、聚合统计等复杂查询,且查询频率高、底层基表数据更新频率低时,物化视图可显著提升查询效率。
2)跨节点数据查询场景:在 GBase 8c 数据库中,跨节点多表关联查询效率较低,可通过在各节点创建物化视图,将查询结果本地化存储,提升跨节点查询效率。
3)只读查询场景:对于无需修改数据,仅需查询的场景,物化视图的高查询效率可大幅提升系统响应速度。
4)资源紧张场景:当数据库服务器 CPU、内存资源紧张,无法承担频繁复杂查询的开销时,物化视图可通过预先计算结果,减少查询时的资源占用,缓解服务器压力。
4.4 注意事项
1)合理选择刷新策略:根据底层基表的数据更新频率,选择合适的刷新方式与刷新周期。
2)避免数据不一致:由于物化视图的数据不会自动同步,若忘记执行刷新操作,会导致物化视图数据与底层基表数据不一致,影响业务决策,需建立完善的刷新机制(如定时任务)。
3)注意存储开销:物化视图会物理存储数据,大数据量场景下会占用大量磁盘空间,需定期清理无用的物化视图,或选择合适的存储策略。
原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。