更新时间:2025-09-19 GMT+08:00
物化视图
物化视图简介
物化视图是一种特殊的物理表,与视图的区别是物化视图存储了查询结果,而不是查询的定义。相比视图物化视图在查询时有更高的速度,但物化视图无法实时更新,对于需要实时响应的业务不够灵活。物化视图又分为增量物化视图和全量物化视图。
- 全量物化视图:全量物化视图需要刷新时,会对视图进行全量更新,即重新执行查询并将结果替换到当前视图中。适用于数据更新频率较低,查询成本较高的场景,因为全量物化视图刷新成本较高,不适合频繁更新的场景。
- 增量物化视图:增量物化视图允许对视图进行增量更新,即只更新上次刷新后发生变化的数据。适用于刷新频率较高的场景。虽然增量物化视图刷新成本较低,但是支持的场景较少(例如增量物化视图目前不支持聚合函数)目前仅支持简单过滤查询和基表UNION ALL。
示例
- 全量物化视图
--建表及插入数据(全量物化视图只支持基表是Astore)。 gaussdb=# CREATE TABLE tb_test(pid varchar(5),snum varchar(5)) WITH (storage_type = astore); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'pid' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE gaussdb=# INSERT INTO tb_test VALUES ('00001','aaaaa'); INSERT 0 1 gaussdb=# INSERT INTO tb_test VALUES ('00001','aacba'); INSERT 0 1 gaussdb=# INSERT INTO tb_test VALUES ('00002','badbc'); INSERT 0 1 --创建全量物化视图。 gaussdb=# CREATE MATERIALIZED VIEW mv_test AS SELECT pid,count(snum) cnt FROM tb_test GROUP BY pid; NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'pid' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. INSERT 0 2 --查询全量物化视图。 gaussdb=# SELECT * FROM mv_test; pid | cnt -------+----- 00002 | 1 00001 | 2 (2 rows) --插入数据后继续查询全量物化视图。 gaussdb=# INSERT INTO tb_test VALUES ('00002','bdacc'); INSERT 0 1 --查询结果没有变化,物化视图需要手动刷新。 gaussdb=# SELECT * FROM mv_test; pid | cnt -------+----- 00002 | 1 00001 | 2 (2 rows) --刷新全量物化视图。 gaussdb=# REFRESH MATERIALIZED VIEW mv_test; INSERT 0 2 --查询全量物化视图。 gaussdb=# SELECT * FROM mv_test; pid | cnt -------+----- 00002 | 2 00001 | 2 (2 rows) --删除表和物化视图。 gaussdb=# DROP MATERIALIZED VIEW mv_test; DROP MATERIALIZED VIEW gaussdb=# DROP TABLE tb_test; DROP TABLE
- 增量物化视图
--创建表。 gaussdb=# CREATE TABLE tb_test(c1 int) WITH (storage_type = astore); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'c1' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE --增量物化视图中包含聚合函数报错。 gaussdb=# CREATE INCREMENTAL MATERIALIZED VIEW imv_test AS SELECT count(*) FROM tb_test; ERROR: Feature not supported DETAIL: aggregates on incremental materialized view creation --创建增量物化视图。 gaussdb=# CREATE INCREMENTAL MATERIALIZED VIEW imv_test AS SELECT * FROM tb_test; CREATE MATERIALIZED VIEW --增量刷新增量物化视图。 gaussdb=# REFRESH INCREMENTAL MATERIALIZED VIEW imv_test; REFRESH MATERIALIZED VIEW --全量刷新增量物化视图。 gaussdb=# REFRESH MATERIALIZED VIEW imv_test; REFRESH MATERIALIZED VIEW --删除表和物化视图。 gaussdb=# DROP MATERIALIZED VIEW imv_test; DROP MATERIALIZED VIEW gaussdb=# DROP TABLE tb_test; DROP TABLE
父主题: 基础概念