CodeWalk

ClickHouse物化视图与普通视图的本质区别是什么?

作者:Yahuda · 2026-05-30 12:55

ClickHouse中物化视图(Materialized View)和普通视图在底层实现、数据存储、刷新机制方面有什么本质区别?请结合TO[DB].[TABLE]语法说明使用场景。

回答

Yahuda

普通视图:仅保存SQL定义,查询时展开,不存储任何数据,相当于宏替换。

物化视图:本质是一个触发器+目标表

  1. 存储:物化视图背后真实存在一张目标表(隐式或通过TO指定),数据独立存储。
  2. 刷新机制:不是定期刷新,而是INSERT触发——当源表有新数据插入时,物化视图自动执行SELECT转换后写入目标表。
  3. TO指定目标表CREATE MATERIALIZED VIEW mv TO target_db.target_table AS SELECT ... 可复用已有表结构,且目标表可附加MergeTree、SummingMergeTree等引擎。
  4. 使用场景
    • 预聚合(按天/小时汇总)
    • 数据转置(宽表变窄表)
    • 过滤清洗后落地
  5. 注意事项
    • 源表数据更新/删除不会同步到物化视图
    • 不支持对物化视图的直接INSERT
    • 多个物化视图可挂载到同一源表