南大通用GBase 8s 快速刷新物化视图

8 阅读4分钟

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

在数据库管理中,物化视图是一种重要的工具,用于提高查询性能和数据处理效率。GBase 8s 提供了三种物化视图刷新方式:COMPLETE、FAST 和 FORCE
其中,FAST 刷新方式通过增量刷新机制,仅将自上次刷新以来对基表进行的所有操作应用到物化视图中,从而显著提高刷新效率。本文将详细介绍如何在 GBase 8s 中创建和使用快速刷新的物化视图,并通过示例展示其实际应用。

快速刷新(FAST)采用增量刷新机制,首次刷新时以全量方式刷新数据,之后则采用增量刷新方式。增量刷新的实现基于物化视图日志表。当对主表数据进行 DML 更改时,GBase 8s 数据库会将描述这些更改的行存储在物化视图日志中,然后使用日志对物化视图进行刷新。物化视图日志和主表存放在一起,一张主表对应一个日志。如果视图涉及多表,每张表都需要创建对应的日志。因此,创建增量刷新的物化视图时,首先需要基于基表的主键创建视图日志,视图中的查询语句中必须包含每张基表的主键字段。该功能仅在 GBase 8s 的 ORACLE 模式下支持。

创建增量刷新物化视图 

示例数据库版本为:GBase8sV8.8_3.6.1

--创建基础表 
set environment sqlmode 'oracle';
create table emp(id int primary key, name varchar2(20),sex varchar(1),sal number(32,0),deptid int, job varchar2(50),hiredate date);
create table dept(deptid int primary key,deptname varchar2(30),mig int); 
--创建物化视图日志
Create materialized view log on emp with primary key;
Create materialized view log on dept with primary key;
--插入数据 
insert into emp values(101,'张三',1,12000,1,'研发工程师','2019-09-02');
insert into emp values(102,'李四',0,9000,1,'研发工程师','2019-09-22');
insert into dept values(1,'研发一部',101);
insert into dept values(2,'销售部',103);
insert into dept values(3,'测试部',null);
--创建增量刷新物化视图 
create MATERIALIZED VIEW mvf01 build immediate 
refresh fast on demand 
as select d.deptid,d.deptname, e.id, e.name,e.sal 
from emp e,dept d 
where d.deptid=e.deptid ;
--立即生成数据
> select * from mvf01;
DEPTNAME  研发一部
NAME      张三
SAL       12000
ID        101
DEPTNAME  研发一部
NAME      李四
SAL       9000
ID        102
2 row(s) retrieved.
-- 再次更新数据
insert into emp values(103,'王五',1,14300,2,'售后','2019-08-12');
insert into emp values(104,'何明',1,6700,2,'销售','2019-02-02');
insert into emp values(105,'刘津京',1,8900,3,'测试','2019-07-02');
--查看物化视图 mvf01,数据没有刷新
> select * from mvf01;

DEPTNAME  研发一部
NAME      张三
SAL       12000
ID        101
DEPTNAME  研发一部
NAME      李四
SAL       9000
ID        102
2 row(s) retrieved.
--手动刷新物化视图
REFRESH MATERIALIZED VIEW mvf01 fast;

--此时,物化视图已刷新
> select * from mvf01;
DEPTID    1
DEPTNAME  研发一部
ID        101
NAME      张三
SAL       12000
DEPTID    1
DEPTNAME  研发一部
ID        102
NAME      李四
SAL       9000
DEPTID    2
DEPTNAME  销售部
ID        103
NAME      王五
SAL       14300
DEPTID    2
DEPTNAME  销售部
ID        104
NAME      何明
SAL       6700
DEPTID    3
DEPTNAME  测试部
ID        105
NAME      刘津京
SAL       8900
5 row(s) retrieved.

 

增量刷新物化视图定时刷新

--创建基础表 
set environment sqlmode 'oracle';
drop table if exists test1;
create table test1(id int primary key,c1 varchar2(30), num number(16,2));
create materialized view log on test1 with primary key;
--创建刷新物化视图,每一分钟刷新一次 
create MATERIALIZED VIEW mvf03 build immediate 
refresh fast on demand 
start with sysdate
next sysdate + 1/1440
as select id,c1,num*100 as sn from test1;
--插入数据 
insert into test1 values(1,'aaaa',2);
insert into test1 values(2,'bbbb',-0.231);
insert into test1 values(3,'cccc',10.23);
insert into test1 values(4,'dddd',7);
insert into dept values(5,'eeee',null);
--此时查询mvf03 返回 0 rows
> select * from mvf03;
No rows found.
--1 分钟后查询,mvf03 数据已刷新
>  select * from mvf03;

        ID C1                                           SN
         1 aaaa                           200.000000000000
         2 bbbb                           -23.000000000000
         3 cccc                           1023.00000000000
         4 dddd                           700.000000000000
4 row(s) retrieved.

 

本文的介绍了如何在 GBase 8s 中创建和使用快速刷新的物化视图。快速刷新机制通过增量刷新显著提高物化视图的刷新效率,特别适用于需要频繁更新数据的场景。希望这些内容能帮助你在实际工作中更高效地管理和优化你的数据库。如果你在使用过程中遇到任何问题,欢迎随时在社区中提问,我们在这里为你提供支持!

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。