0Pricing
SQL Academy · 课时

物化视图与 REFRESH 策略

使用 MATERIALIZED VIEW 持久化开销较高的查询结果,并按计划或按需刷新

物化视图与 REFRESH 策略 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。

物化视图 = 保存的结果

与普通视图不同,物化视图会将其 SELECT 的结果存储到磁盘。查询会读取已存储的数据,因此速度很快。您可以按需刷新。

CREATE MATERIALIZED VIEW daily_revenue AS
SELECT date_trunc('day', created_at) AS day,
       SUM(total) AS revenue
FROM orders
GROUP BY 1;

查询

查询物化数据时,只需对其执行 SELECT:

SELECT * FROM daily_revenue WHERE day >= NOW() - INTERVAL '30 days';

REFRESH MATERIALIZED VIEW

重新计算结果。会对视图加排他锁:

REFRESH MATERIALIZED VIEW daily_revenue;
-- Selects on the view block during refresh.

REFRESH MATERIALIZED VIEW CONCURRENTLY

非阻塞刷新——在新数据准备就绪之前,读取者仍会从旧数据中读取。视图必须具有唯一索引:

CREATE UNIQUE INDEX ON daily_revenue (day);

REFRESH MATERIALIZED VIEW CONCURRENTLY daily_revenue;

物化视图上的索引

您可以像为任何表创建索引一样为物化视图创建索引,从而加快查询:

CREATE INDEX daily_revenue_day_idx ON daily_revenue (day DESC);

何时进行物化

在以下情况下使用物化视图:

  • 底层查询开销很大
  • 结果允许略有过时
  • 两次更新之间会多次运行该查询

计划刷新

没有内置调度程序。请使用 pg_cron、操作系统的 cron 作业或应用调度程序:

-- Via pg_cron extension:
SELECT cron.schedule('refresh_daily', '0 1 * * *', 'REFRESH MATERIALIZED VIEW CONCURRENTLY daily_revenue;');

增量刷新

PostgreSQL 没有原生增量刷新功能——每次 REFRESH 都会从头重新计算。对于增量聚合,请考虑:

  • 手动编写的基于触发器的“汇总表”
  • TimescaleDB 连续聚合
  • pg_ivm 扩展(增量物化视图)

读取基础表而不影响读取操作

CONCURRENT 刷新会在事务快照中读取基础表,不会阻塞基础表。但在数据量巨大时,刷新本身可能很慢。

磁盘使用量

物化视图会使其数据的存储量增加一倍。请相应规划磁盘空间。

与分区结合使用

对于海量时间序列数据,请对物化视图进行分区(或使用 TimescaleDB):

CREATE MATERIALIZED VIEW orders_summary AS ... ;
CREATE INDEX ON orders_summary (day);
-- For very large views, consider regular table + manual upsert pattern.

何时不应使用

如果读取操作可以接受使用最新数据执行 SQL,并且底层查询已经足够快,那么请免去刷新维护工作。物化视图是一种权衡——以数据陈旧换取速度。

回顾

物化视图会缓存查询结果。

  • 存储在磁盘上,可建立索引,速度快
  • 手动或按计划执行 REFRESH
  • CONCURRENTLY 需要 UNIQUE 索引
  • 适用于开销大且允许略有过时的聚合

快速检查

REFRESH MATERIALIZED VIEW CONCURRENTLY 需要什么,而基本的 REFRESH 不需要?

常见问题解答

「物化视图与 REFRESH 策略」课时是免费的吗?

是的 — 「物化视图与 REFRESH 策略」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。

「物化视图与 REFRESH 策略」这节课中我会学到什么?

使用 MATERIALIZED VIEW 持久化开销较高的查询结果,并按计划或按需刷新 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 SQL Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「物化视图与 REFRESH 策略」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 SQL Academy 课中编写并运行代码吗?

能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 普通视图:逻辑复用
  2. 可更新视图与 INSTEAD OF 触发器
  3. 物化视图与 REFRESH 策略
  4. 何时进行预聚合
← 返回 SQL Academy