域名 AXUM.RS 将于 2025 年 10 月到期。我们无意再对其进行续费,如果你有意接续这个域名,请与我们取得联系。
  • AXUM.RS 现仅需人民币 3000 元(大写:叁仟元整。接受适度议价
  • 按照行业规则,AXUM.RS 到期后,大概率会进入长时间的赎回期,该期间内,如果你想拥有该域名,将要付出高额的费用
  • 我们已启用 AXUM.EU.ORG 域名,并将持续运营
  • 仅接受微信或支付宝交易
如果你对 AXUM.RS 有兴趣,请和我们进行联系:

物化视图

本章将讨论 PostgreSQL 的物化视图。它可以用来缓存复杂且昂贵的查询结果,并允许你定期刷新此结果。

和普通视图不一样,物化视图允许将查询结果存储在物理磁盘上,并定期更新数据。

你应该知道,普通视图是以虚拟表的形式表示基础表的数据的,虽然不推荐,但普通视图的数据也可以更新。

物化视图可以用来缓存复杂且昂贵的查询结果,并允许你定期刷新此结果。它在许多需要快速数据访问的情况下很有用,因此它通常用于数据仓库和商业智能应用程序。

创建物化视图

CREATE MATERIALIZED VIEW 视图名
AS
查询
WITH [NO] DATA;

要将数据加载到物化视图中,请使用 REFRESH MATERIALIZED VIEW语句:

REFRESH MATERIALIZED VIEW [CONCURRENTLY] 视图名;
  • 在刷新物化视图的数据时,PostgreSQL 会锁定整张表。要避免这种情况,可以使用 CONCURRENTLY 选项。
  • CONCURRENTLY 选项的一个要求是,物化视图必须具有 UNIQUE 索引。

删除物化视图

DROP MATERIALIZED VIEW 视图名;

示例

以下语句创建一个名为 rental_by_category 的物化视图:

由于我们使用的是 WITH NO DATA选项,所以该视图创建完之后,你无法从中查询数据。此时需要将数据加载到该视图中:

REFRESH MATERIALIZED VIEW rental_by_category;

此时,再查询数据,就能得到预期的结果:

SELECT * FROM rental_by_category;
CREATE UNIQUE INDEX rental_category ON rental_by_category (category);

现在可以放心地使用 CONCURRENTLY选项刷新数据了:

REFRESH MATERIALIZED VIEW CONCURRENTLY rental_by_category;
要查看完整内容,请先登录