在 PostgreSQL 中,物化视图(Materialized View) 是一种物理存储查询结果的数据库对象。
可以理解为:
视图(View)是“查询的别名”,物化视图是“查询结果的快照”。
| 对比项 | 普通视图(View) | 物化视图(Materialized View) |
|---|---|---|
| 是否存储数据 | 否(每次查询都执行 SQL) | 是(数据已落盘) |
| 查询速度 | 慢(依赖底层表) | 快(直接读结果) |
| 数据实时性 | 实时 | 非实时(需刷新) |
| 能否建索引 | 依赖基表 | ✅ 可以单独建索引 |
数据是“冻结”的
需要手动或定时刷新
REFRESH MATERIALIZED VIEW mv_name;
适合场景
CREATE MATERIALIZED VIEW mv_sales_summary AS
SELECT user_id, SUM(amount) AS total
FROM orders
GROUP BY user_id;
SELECT * FROM mv_sales_summary;
CREATE INDEX idx_mv_user ON mv_sales_summary(user_id);
-- 完全刷新(会锁表)
REFRESH MATERIALIZED VIEW mv_sales_summary;
-- 并发刷新(不阻塞查询,PostgreSQL 9.4+)
REFRESH MATERIALIZED VIEW CONCURRENTLY mv_sales_summary;
⚠️ 使用
CONCURRENTLY必须至少有一个唯一索引
如果你愿意,我也可以帮你:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。