原 PG和GreenPlum中的物化视图
Tags: 原创PGGreenPlumPostgreSQL物化视图
简介
物化视图(也叫实体化视图)是PostgreSQL9.3版本才支持的一个功能,物化视图的使用规则和视图是一样的,和视图不同的是,物化视图将结果集持久化在表中;
一个物化视图对应一个SQL语句,查询时去对应的结果集表查询(跟视图查询方式有些区别)。
也可以基于视图来创建物化视图。
创建物化视图语句:
1 | CREATE MATERIALIZED VIEW mymatview AS SELECT * FROM mytab; |
语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | postgres=# \h REFRESH Command: REFRESH MATERIALIZED VIEW Description: replace the contents of a materialized view Syntax: REFRESH MATERIALIZED VIEW [ CONCURRENTLY ] name [ WITH [ NO ] DATA ] postgres=# postgres=# \h CREATE MATERIALIZED Command: CREATE MATERIALIZED VIEW Description: define a new materialized view Syntax: CREATE MATERIALIZED VIEW table_name [ (column_name [, ...] ) ] [ WITH ( storage_parameter [= value] [, ... ] ) ] [ TABLESPACE tablespace_name ] AS query [ WITH [ NO ] DATA ] postgres=# |
在PostgreSQL中,创建物化视图时,WITH NO DATA和WITH DATA选项控制了物化视图创建时是否立即填充数据。
WITH NO DATA: 当在创建物化视图时使用WITH NO DATA选项,PostgreSQL只会创建物化视图的结构,但不会立即填充任何数据进去。这意味着物化视图在创建后是空的。你可以在之后通过执行REFRESH MATERIALIZED VIEW命令来手动填充数据。这种方法适用于那些数据集非常大,或者填充数据操作需要在非高峰时段进行的场景,以便减少对系统资源的即时压力。
WITH DATA: 如果在创建物化视图时不指定WITH NO DATA,或者明确指定WITH DATA,那么PostgreSQL会在创建物化视图的同时立即执行底层查询并将结果集填充到物化视图中。这意味着物化视图创建后即可直接使用,无需额外的刷新操作。这对于数据集较小,或者需要立即可用的物化视图场景非常有用,但可能会在创建过程中对系统造成较大的资源消耗,尤其是对于大型查询或在资源紧张的系统上。
总结来说,WITH NO DATA选项让你能够分两步走:先创建物化视图的结构,之后再根据需要填充数据;而省略此选项或使用WITH DATA则是在创建时立即完成数据填充,物化视图创建后即可立即用于查询,但可能会有更高的即时资源需求。选择哪种方式取决于数据量大小、资源可用性和对数据即时性的要求。
在PostgreSQL中,使用REFRESH MATERIALIZED VIEW命令更新物化视图的内容时,可选的WITH [ NO ] DATA参数控制了刷新操作的具体行为:
•WITH DATA: 当使用WITH DATA或者根本不指定(因为默认行为就是WITH DATA),该命令会重新执行物化视图定义中的查询,以最新的基础数据来填充物化视图。这意味着物化视图会被更新为反映当前数据源的最新状态,所有相关的数据更改都会被包含进来。这对于确保物化视图数据的时效性和准确性非常重要。