物化视图
物化视图是相对普通视图而言的。普通视图是虚拟表,而物化视图实际上就是存储SQL执行语句的结果,可以直接使用数据而不用重复执行查询语句,从而提升性能。
按照刷新方式物化视图分为两种:
- 全量物化视图:仅支持对已创建的物化视图进行全量更新,而不支持进行增量更新。创建全量物化视图语法和CREATE TABLE AS语法类似。
- 增量物化视图:可以对物化视图增量刷新,需要用户手动执行语句完成对物化视图在一段时间内的增量数据刷新。与全量创建物化视图的不同在于目前增量物化视图所支持场景较小。目前物化视图创建语句仅支持基表扫描语句或者UNION ALL语句。
全量物化视图语法格式
创建全量物化视图
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命令。
全量物化视图示例
--准备数据。
openGauss=# CREATE TABLE t1(c1 int, c2 int);
openGauss=# INSERT INTO t1 VALUES(1, 1);
openGauss=# INSERT INTO t1 VALUES(2, 2);
--创建全量物化视图。
openGauss=# CREATE MATERIALIZED VIEW mv AS select count(*) from t1;
CREATE MATERIALIZED VIEW
--查询物化视图结果。
openGauss=# SELECT * FROM mv;
count
-------
2
(1 row)
--向物化视图的基表中插入数据。
openGauss=# INSERT INTO t1 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
增量物化视图语法格式
创建增量物化视图
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命令。
增量物化视图示例
--准备数据。
openGauss=# CREATE TABLE t1(c1 int, c2 int);
openGauss=# INSERT INTO t1 VALUES(1, 1);
openGauss=# INSERT INTO t1 VALUES(2, 2);
--创建增量物化视图。
openGauss=# CREATE INCREMENTAL MATERIALIZED VIEW mv AS SELECT * FROM t1;
CREATE MATERIALIZED VIEW
--插入数据。
openGauss=# INSERT INTO t1 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 t1 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