GaussDB新特性物化视图介绍

物化 视图介绍

物化视图是相对普通视图而言的。普通视图是虚拟表,而物化视图实际上就是存储SQL执行语句的结果,可以直接使用数据而不用重复执行查询语句,起到缓存的效果。

按照刷新方式物化视图分为全量物化视图和增量物化视图两种:

全量物化视图:仅支持对已创建的物化视图进行全量更新,而不支持进行增量更新。创建全量物化视图语法和CREATE TABLE AS语法类似。

增量物化视图:可以对物化视图增量刷新,需要用户手动执行语句完成对物化视图在一段时间内的增量数据刷新。与全量创建物化视图的不同在于目前增量物化视图所支持场景较小。目前物化视图创建语句仅支持基表扫描语句或者UNION ALL语句。

GaussDB即支持全量物化视图也支持增量物化视图,目前Ustore引擎不支持创建、使用物化视图,物化视图是现代数据库的高级特性。目前GaussDB已经全面支持物化视图功能,有了物化视图功能,GaussDB在数据库兼容性方面又迈出了一大步,下面将介绍GaussDB全量和增量物化视图的使用。

GaussDB全量 物化视图

2 .1 全量物化视图语法格式:

创建全量物化视图CREATE MATERIALIZED VIEW [ view_name ] AS query;

刷新全量物化视图REFRESH MATERIALIZED VIEW [ view_name ];

删除物化视图DROP MATERIALIZED VIEW [ view_name ];

查询物化视图SELECT * FROM [ view_name ];

参数说明:

view_name:要创建的物化视图的名称。

AS query:一个SELECT、TABLE 或者VALUES命令。

2 .2 全量物化视图示例:

--创建表和插入数据。

openGauss=# CREATE TABLE t_full(c1 int, c2 int);

openGauss=# INSERT INTO t_full VALUES(1, 1);

openGauss=# INSERT INTO t_full VALUES(2, 2);

--创建全量物化视图。

openGauss=# CREATE MATERIALIZED VIEW mv AS select count(*) from t_full;

CREATE MATERIALIZED VIEW

--查询物化视图结果。

openGauss=# SELECT * FROM mv;

count


2

(1 row)

--向物化视图中基表插入数据。

openGauss=# INSERT INTO t_full VALUES(3, 3);

INSERT 0 1

--对全量物化视图做全量刷新。

openGauss=# REFRESH MATERIALIZED VIEW mv;

REFRESH MATERIALIZED VIEW

--查询物化视图结果。

openGauss=# SELECT * FROM mv;

count


3

(1 row)

--删除物化视图。

openGauss=# DROP MATERIALIZED VIEW mv;

DROP MATERIALIZED VIEW

GaussDB增量物化视图

3 .1 增量物化视图语法格式:

创建增量物化视图CREATE INCREMENTAL MATERIALIZED VIEW [ view_name ] AS query;

全量刷新物化视图REFRESH MATERIALIZED VIEW [ view_name ];

增量刷新物化视图REFRESH INCREMENTAL MATERIALIZED VIEW [ view_name ];

删除物化视图DROP MATERIALIZED VIEW [ view_name ];

查询物化视图SELECT * FROM [ view_name ];

view_name:要创建的物化视图的名称。

AS query:一个SELECT、TABLE 或者VALUES命令。

3.2 增量物化视图示例:

--创建表和插入数据。

openGauss=# CREATE TABLE t_v(c1 int, c2 int);

openGauss=# INSERT INTO t_v VALUES(1, 1);

openGauss=# INSERT INTO t_v VALUES(2, 2);

--创建增量物化视图。

openGauss=# CREATE INCREMENTAL MATERIALIZED VIEW mv AS SELECT * FROM t_v;

CREATE MATERIALIZED VIEW

--再次插入数据。

openGauss=# INSERT INTO t_v VALUES(3, 3);

INSERT 0 1

--增量刷新物化视图。

openGauss=# REFRESH INCREMENTAL MATERIALIZED VIEW mv;

REFRESH MATERIALIZED VIEW

--查询物化视图结果。

openGauss=# SELECT * FROM mv;

c1 | c2

----+----

1 | 1

2 | 2

3 | 3

(3 rows)

--再次插入数据。

openGauss=# INSERT INTO t_v VALUES(4, 4);

INSERT 0 1

--全量刷新物化视图。

openGauss=# REFRESH MATERIALIZED VIEW mv;

REFRESH MATERIALIZED VIEW

--查询物化视图结果。

openGauss=# select * from mv;

c1 | c2

----+----

1 | 1

2 | 2

3 | 3

4 | 4

(4 rows)

--删除物化视图。

openGauss=# DROP MATERIALIZED VIEW mv;

DROP MATERIALIZED VIEW

GaussDB物化视图使用支持和限制场景

4 .1 物化视图支持的场景

1)单表查询语句。

2)多个单表查询的UNION ALL。

3)物化视图上支持创建索引。

4)物化视图支持Analyze操作。

4.2 物化视图不支持的场景

1)物化视图中不支持多表Join连接计划以及subquery计划。

2)除少部分ALTER操作外,不支持对物化视图中基表执行绝大多数DDL操作。

3)物化视图不支持增删改操作,只支持查询语句。

4)不支持用临时表/hashbucket/unlog/分区表创建物化视图。

5)不支持物化视图嵌套创建(即物化视图上创建物化视图)。

6)仅支持行存表,不支持列存表。

7)不支持UNLOGGED类型的物化视图,不支持WITH语法。

相关推荐
sun0077003 小时前
mysql索引底层原理
数据库·mysql
workflower6 小时前
MDSE和敏捷开发相互矛盾之处:方法论本质的冲突
数据库·软件工程·敏捷流程·极限编程
Tony小周6 小时前
实现一个点击输入框可以弹出的数字软键盘控件 qt 5.12
开发语言·数据库·qt
lifallen6 小时前
Paimon 原子提交实现
java·大数据·数据结构·数据库·后端·算法
TDengine (老段)7 小时前
TDengine 数据库建模最佳实践
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
Elastic 中国社区官方博客7 小时前
Elasticsearch 字符串包含子字符串:高级查询技巧
大数据·数据库·elasticsearch·搜索引擎·全文检索·lucene
Gauss松鼠会7 小时前
GaussDB应用场景全景解析:从金融核心到物联网的分布式数据库实践
数据库·分布式·物联网·金融·database·gaussdb
守城小轩8 小时前
Chromium 136 编译指南 - Android 篇:开发工具安装(三)
android·数据库·redis
尽兴-8 小时前
如何将多个.sql文件合并成一个:Windows和Linux/Mac详细指南
linux·数据库·windows·sql·macos
小小不董8 小时前
深入理解oracle ADG和RAC
linux·服务器·数据库·oracle·dba