视图 VS 物化视图

Posted

技术标签:

【中文标题】视图 VS 物化视图【英文标题】:Views VS Materialized Views 【发布时间】:2019-10-07 03:36:04 【问题描述】:

视图和物化视图之间的实际区别是什么?

我浏览了很多链接,他们说普通视图就像一个虚拟表,数据不能存储在磁盘上,以防物化数据将存储在磁盘上。但是从那里我什么时候使用普通视图以及何时使用物化视图什么都没有。如果我创建两个视图,我可以在我的架构中看到。我想知道我们使用普通视图和物化视图的确切时间和地点。请通过实际示例为我提供解决方案。

谢谢

【问题讨论】:

What is the difference between Views and Materialized Views in Oracle?的可能重复 【参考方案1】:

视图只是一个存储的查询。这是一种保存一些复杂业务逻辑(连接、过滤器、派生值)的便捷方式,以便可以重复使用并与其他用户共享。

物化视图也是一种保存查询的方法,但它会物化结果集。也就是说,它会在磁盘上创建数据的副本。

使用物化视图的主要原因是提高性能。每次从视图中选择时,我们都会执行整个查询;如果这是一个昂贵的查询,那是我们每次支付的成本。通过物化视图,我们用磁盘空间换取时间。

此外,我们可以将物化视图视为表:我们可以索引它们,可以添加键约束,甚至可以在外键中引用它们。

不使用物化视图的主要原因是成本。它们占用磁盘空间。它们也必须得到维护。默认情况下,物化视图是静态的,这意味着它们的数据会随着时间的推移逐渐变得陈旧。刷新物化视图可能很麻烦(取决于底层查询)。而查询视图总是为我们提供最新的数据视图。

以下仅为指导方针,既不完整也不独特

何时使用视图

当我们希望查询可重用、可共享和可控时 当我们想要一个简单的界面而不是内部复杂性时 当我们想要对我们的数据实施访问限制时

何时使用物化视图

当我们想要针对大量数据运行标准汇总(通常是聚合)查询时 当我们需要来自另一个数据库的数据并且我们无法保证其可用性时 当基础数据量足够大并且性能要求足够严格以至于物化数据具有成本效益时的视图用例

您的问题的答案在the documentation(*) 中。我无意重写那本精美的手册,但我会解决您的问题,因为已经开始我注定要继续。

    物化视图是一个或多个表中数据的副本,可能在其他模式甚至其他数据库中。 正如我所说,复制数据会产生开销。存储空间和处理陈旧数据的成本很高。 视图只是一个查询,实际上没有可索引的内容。 select * from user_extents where segment_name = 'name of mview' 提交时刷新不是免费的。执行会消耗系统资源(源表上的事务将花费更长的时间)。此外,很多物化视图只能支持完全按需刷新。

(*) 这是 Oracle 的文档,因为这是您的个人资料所建议的,但其他 RDBMS 平台也有类似的文档。

【讨论】:

@apc......1)你想说视图和物化视图都是保存查询和逻辑的便捷方式,但是物化视图使用磁盘空间来复制普通视图的数据不要,对吧? 2)如果两者都是保存查询和逻辑的便捷方式,那么我们不使用物化视图的唯一原因只是因为它们占用磁盘空间? 3)我们可以在物化视图中应用索引,而我们不能在视图中应用? @apc......4) 我们如何检查物化视图是否使用磁盘空间来复制数据? 5)就像你说的刷新物化视图可能会很麻烦,但是在创建物化视图时,我们可以选择是否要在 Commit 或 Demmand 上刷新物化视图,如果我们在 Commit 时进行刷新,那么当用户插入时数据并提交,然后物化视图会自动获得引用?

以上是关于视图 VS 物化视图的主要内容,如果未能解决你的问题,请参考以下文章

oracle物化视图不会自动更新是怎么回事

Oracle物化视图

物化视图

Oracle物化视图梳理

物化视图

如何获得oracle物化视图 定时刷新时 刷新所用的时间 或者是监控 物化视图在jobs中建立的job任务的执行时间