“Materialization(物化)”在不同技术语境下含义不同,常见场景包括数据库/数仓(物化视图)、大数据计算(中间结果物化)、前端/ORM(对象物化)、编译/查询优化(表达式物化)。下面按最常见、最实用的场景说明如何操作。
这是“物化”最典型的用法:把查询结果预先计算并存储,提升查询性能。
CREATE MATERIALIZED VIEW mv_user_order AS
SELECT u.id, u.name, COUNT(o.id) AS order_cnt
FROM users u
JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name;
SELECT * FROM mv_user_order;
REFRESH MATERIALIZED VIEW mv_user_order;
REFRESH MATERIALIZED VIEW CONCURRENTLY mv_user_order;
MATERIALIZED VIEW + 引擎把计算过程中的中间 DataFrame / 表落盘或缓存,避免重复计算。
df = spark.sql("SELECT * FROM big_table WHERE dt='2024-01-01'")
df.cache() # 内存物化
# 或
df.createOrReplaceTempView("tmp_view")
spark.sql("CREATE TABLE tmp_result AS SELECT * FROM tmp_view") # 物理物化
指把数据库行 → 内存对象的过程。
users = session.query(User).all() # 查询并物化为 User 对象
延迟加载(Lazy Load)场景下,访问属性时才真正“物化”数据。
在查询计划中:
通常由执行引擎自动完成,无需手动操作,但可通过:
work_memMATERIALIZED)WITH t AS MATERIALIZED (
SELECT * FROM big_table
)
SELECT * FROM t JOIN t2 USING(id);
✅ 明确目的:加速查询 / 复用结果 / 状态持久化
✅ 控制刷新策略:定时 / 增量 / 事件触发
✅ 注意存储成本与一致性
✅ 大数据场景下优先“按需物化”
如果你指的是某一具体系统(如 MySQL、ClickHouse、Spark、Flink、Oracle),可以告诉我,我给你更针对性的操作步骤。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。