视图 是一个保存的查询,作用像虚拟表——你像查询表一样查询它,但每次都会运行底层查询。物化视图 物理存储查询结果(定期刷新),以牺牲新鲜度来换取读取速度。
常规视图——保存的查询
active_users
id, name, email users active ;
active_users name ;
视图 是一个保存的查询,作用像虚拟表——你像查询表一样查询它,但每次都会运行底层查询。物化视图 物理存储查询结果(定期刷新),以牺牲新鲜度来换取读取速度。
active_users
id, name, email users active ;
active_users name ;
视图是一个 虚拟表 ——它本身不存储任何数据,只存储查询定义。每次查询视图时,底层查询都会针对当前数据运行(始终保持最新)。
✓ SIMPLIFY complex queries — encapsulate a complex JOIN/aggregation as a named view
✓ ABSTRACTION — present a clean, stable interface; hide underlying table complexity
✓ SECURITY — grant access to a view exposing only certain columns/rows (hide the rest)
✓ REUSABILITY — define common query logic once, reuse it everywhere
✓ Consistency — everyone uses the same definition of "active_users"
视图很适合用来封装复杂逻辑、在表之上提供稳定的抽象、以及实现安全性(仅公开特定数据)。
-- stores the RESULTS physically (precomputed) for fast reads
CREATE MATERIALIZED VIEW monthly_sales AS
SELECT month, SUM(amount) AS total FROM orders GROUP BY month;
SELECT * FROM monthly_sales; -- fast — reads stored results, doesn't recompute
REFRESH MATERIALIZED VIEW monthly_sales; -- update the stored data when needed
物化视图 物理存储查询结果——因此读取速度很快(无需重新计算),但数据的新鲜度仅取决于上次 REFRESH。对于经常查询但能容忍轻微过期数据的昂贵聚合非常理想。
View → always FRESH, but re-runs the query each time (slower for complex queries)
Materialized view → FAST reads (precomputed), but data can be STALE until refreshed
→ Use views for abstraction/simplification; materialized views for caching expensive
query results that are read often and don't need real-time freshness.
视图是一个有用的数据库特性,用于 抽象、简化和安全性,理解它们(以及物化视图)对于组织和优化数据库访问很有价值。
常规 视图 (充当虚拟表的保存查询)提供真实的好处:简化复杂查询(将复杂的 JOINs/聚合封装为干净的命名视图)、在表之上提供稳定的抽象(使应用代码或其他查询使用一致的接口)、启用 安全性 (授予对仅公开特定列/行同时隐藏敏感数据的视图的访问权限)、以及促进可重用性(将通用查询逻辑定义一次)。
这些使视图对于可维护的、安全的数据库设计非常有价值。物化视图 解决了不同的需求——性能:通过物理存储预计算的查询结果(定期刷新),它们使昂贵的聚合读取速度很快,代价是潜在的数据过期。
理解 权衡 ——常规视图始终保持最新但每次重新运行查询,而物化视图速度快但在刷新前可能过期——对于做出正确选择很重要(视图用于抽象/简化,物化视图用于缓存能容忍轻微过期数据的昂贵、频繁读取的结果)。
由于组织查询逻辑(用于抽象和安全性的视图)和优化昂贵的重复查询(用于缓存的物化视图)是数据库工作中的真实需求,而且由于理解两种类型及其新鲜度/性能权衡可以帮助你适当地应用它们,了解视图和物化视图是构建可维护、高性能、安全数据库访问的实用、相关知识。