在 Amazon Redshift 中使用实体化视图比使用基础 table 有什么优势?

What is the advantage of using a Materialized View over a base table in Amazon Redshift?

从概念上讲,我知道物化视图是计算值的静态表示,但我不明白这与创建包含相同预计算数据的 table 在功能上有何不同。我认为 table 可能性能更高,因为可以添加排序键。

  1. 物化视图,或以前已知的快照,是一个 table 段,其内容根据查询定期刷新,无论是针对本地还是远程 table.对远程 table 使用物化视图是实现站点间数据复制的最简单方法。

  2. 它可以用作聚合 table 基于多个 table 使用 Join。我们也可以实现行级安全权限

  3. 物化视图可用于提高各种查询的性能,包括执行数据聚合和转换的查询。

  4. 加载加入的table个MV后,根据刷新机制,MVS数据会自动刷新

那天我自己也有同样的问题...据我所知,主要区别是:

  1. REFRESH MATERIALIZED VIEW 语法。要 re-fill 和 table,您必须在事务中再次对 table 和 运行 查询进行 t运行 分类。所以从编码的角度来看,MV 更有效率。

  2. MV是数据库中的依赖对象。必须以级联方式删除上游 tables(在其定义中使用的那些)。对上游 table 的更改也非常有限。 table 独立于在某个时间点生成它的查询。所以这是一个设计选择。我会说使用 MV 是一种更保守的设计。

至于键,您可以在创建语句中指定它们(根据 official docs

简而言之,MV 是伴随 REFRESH 的一次性操作,而 Table CTAS 将是 DROP & Recreate 或 Truncate(但与 Drop 和 recreate 相比,截断后插入会更慢)选项。选择 MV 的最好的部分是它允许 2 种模式增量和满载红移但增量被限制在一个巨大的水平没有复杂的 query/Joins/Order by/Limit/Aggregations (只允许基本计数,最大等)但仍然 MVs 变成更可取,因为它有另一种模式,可以使用相同的 REFRESH 命令再次重新计算满载。选择 CTAS 而不是 MV 的唯一有用的方面是 Table 上的 Distribution Style AUTO 与 MV 中的 Not Such Auto 选项,这意味着它不允许红移功能在需要时自行决定分布样式。