摘要:GBase 8s数据库系统的ORACLE模式,提供了物化视图数据管理工具,能够留存逻辑查询的快照数据,从而极大地提升数据检索的速度和效率。今天,我们就来讨论GBase 8s中物化视图的入门知识,以及如何利用这一功能优化我们的数据库性能。
GBase 8s数据库系统的ORACLE模式,提供了物化视图数据管理工具,能够留存逻辑查询的快照数据,从而极大地提升数据检索的速度和效率。今天,我们就来讨论GBase 8s中物化视图的入门知识,以及如何利用这一功能优化我们的数据库性能。
注意:该功能仅在 GBase 8s的ORACLE 模式下支持。
物化视图的创建
创建物化视图时常用的选项如下所示:
create materialized view 物化视图名 --创建物化视图build [immediate | deferred ] --创建方式,默认 immediaterefresh「force | fast| complete ] --物化视图刷新方式,默认 forceon [commit | demand] --刷新触发方式start with 开始时间 --设置开始时间next 间隔时间 --设置间隔时间as subquery ; --查询语句语法解释说明:
1.创建 build的方式
(1) immediate: 创建物化视图的同时立即生成数据,默认。
(2) deferred: 延迟至第一次 refresh 时才生效
2.刷新的方式
(1) force :强制刷新,默认。
(2) fast : 快速刷新。只刷新‘增量’部分 (前提:创建物化日志)
(3) complete: 当物化视图刷新时会根据查询语句生成的数据进行全量刷新
3.刷新时机
(1) on commit: 基表有 commit 动作时,刷新刷图;
(2) on demand: 按需刷新,用户可以手动刷新,也可通过 START WITH 和 NEXT 指定时间自动刷新;
START WITH ... [ NEXT ...]
[1] START WITH ... 用户指定物化视图的首次刷新时间,NEXT ...指定下一次刷新时间,后者与前者的时间间隔就是自动刷新的间隔频率;
[2]如果指定 START WITH 省略 NEXT 则首次刷新后不再自动刷新;
[3]如果省略 START WITH 指定 NEXT 则使用当前系统时间与下一次刷新时间的间隔作为刷新间隔;
[4]如果 START WITH 和 NEXT 均未指定则物化视图不会自动刷新。
物化视图的刷新
执行refresh materialized view 物化视图名,完成物化视图的刷新。
REFRESH MATERIALIZED VIEW 物化视图名 「force | fast | complete ] ;手动刷新物化视图时,可指定刷新方式。请注意若指定 fast 刷新,基础表必须建有物化视图日志。
物化视图的删除
DROP MATERIALIZED VIEW 物化视图名;当删除一个物化视图时,也会删除依赖于此物化视图的任何其它视图。
示例:创建全量刷新物化视图
示例数据库版本为:GBase8sV8.8_3.5.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);--1. build immediate 全量刷新物化视图create MATERIALIZED VIEW mv01 build immediaterefresh complete on demandas select d.deptname, e.name,e.salfrom emp e,dept dwhere d.deptid=e.deptid order by e.id;--立即生成数据> select * from mv01;DEPTNAME 研发一部NAME 张三SAL 12000ID 101DEPTNAME 研发一部NAME 李四SAL 9000ID 1022 row(s) retrieved.--2. build deferred全量刷新物化视图create MATERIALIZED VIEW mv02(deptname,empname,empsal)build deferred refresh completeon demandas select d.deptname, e.name,e.salfrom emp e,dept dwhere d.deptid=e.deptid order by e.id;--延迟刷新数据,mv02 此刻没有记录> select * from mv02;DEPTNAME EMPNAME EMPSALNo rows found.--3. 再次更新数据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');--查看物化视图,数据没有刷新> select * from mv02;DEPTNAME EMPNAME EMPSALNo rows found.> select * from mv01;DEPTNAME 研发一部NAME 张三SAL 12000ID 101DEPTNAME 研发一部NAME 李四SAL 9000ID 1022 row(s) retrieved.--4. 手动刷新物化视图REFRESH MATERIALIZED VIEW mv01;REFRESH MATERIALIZED VIEW mv02 complete;--此时,物化视图已刷新> select * from mv01;DEPTNAME 研发一部NAME 张三SAL 12000ID 101DEPTNAME 研发一部NAME 李四SAL 9000ID 102DEPTNAME 销售部NAME 王五SAL 14300ID 103DEPTNAME 销售部NAME 何明SAL 6700ID 104DEPTNAME 测试部NAME 刘津京SAL 8900ID 1055 row(s) retrieved.> select * from mv02;DEPTNAME EMPNAME EMPSAL研发一部 张三 12000研发一部 李四 9000销售部 王五 14300销售部 何明 6700测试部 刘津京 89005 row(s) retrieved.定时刷新物化视图示例
--创建基础表set environment sqlmode 'oracle';drop table if exists emp;drop table if exists dept;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 mv03 build immediaterefresh complete on demandstart with sysdatenext sysdate + 1/1440as select d.deptname, e.name,e.jobfrom emp e,dept dwhere d.deptid=e.deptid order by e.id;--插入数据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);--此时查询mv03 返回 0 rows> select * from mv03;No rows found.--1 分钟侯查询,mv03 数据已刷新> select * from mv03;DEPTNAME 研发一部NAME 张三JOB 研发工程师ID 101DEPTNAME 研发一部NAME 李四JOB 研发工程师ID 1022 row(s) retrieved.删除物化视图
DROP MATERIALIZED VIEW mv01;DROP MATERIALIZED VIEW mv02;DROP MATERIALIZED VIEW mv03;物化视图是GBase 8s提供的工具,不仅可以提高查询性能,还可以简化数据管理。通过合理地创建和刷新物化视图,我们可以确保数据的一致性和实时性,同时减少数据库的负载。感谢您的阅读,有问题可以与我们联系,让我们一起探索GBase 8s物化视图的更多可能。
来源:科技新坐席