我是Oracle数据库的新手。如果我正确理解,则物化视图是将结果集另存为数据库中的物理表的视图,并且会基于某些参数刷新此视图/表。如果将视图另存为物理表,为什么不首先将数据存储到表中?那么,使用物化视图代替表有什么好处?

#1 楼

使用实例化视图的最大好处之一是Oracle负责保持数据同步。如果您有单独的聚合表,则您有责任保持数据同步。这通常需要合理数量的代码和相当数量的测试,并且大多数组织会设法犯下会导致聚合表不同步的漏洞。当您尝试实现聚合表的增量刷新时,尤其如此。

另一个主要的好处是,根据设置,当用户对基本数据库执行查询时,Oracle可以使用查询重写来使用物化视图。表。因此,例如,如果您有一个针对明细表的大量现有报表,这些明细表产生每日,每月和每年的汇总结果,则可以在基表上创建一个物化视图,以每天的方式汇总数据,优化器可以利用该物化视图处理所有现有查询。这使优化数据仓库中的报告工作负载变得更加容易,而无需尝试去重写数十个报告以使用新的聚合表或与DBMS_ADVANCED_REWRITE混在一起来强制自己重写查询。

#2 楼

物化视图会随着其基表的更新而自动更新。

评论


请注意,“按需”是默认的刷新行为。物化视图必须使用ON COMMIT创建。维护物化视图不是免费的。不过,它可能比触发器便宜。

– durette
16-10-14在22:03

#3 楼

使用MV的一个很好的例子是,有时您想聚合数据并频繁,快速地从大型表中获取此摘要信息。如果没有实例化视图,则必须对某些表进行反规范化并通过代码维护聚合,或者重复扫描大行集。对于仪表板和类似的在线应用程序,这两种方法并不总是总是可以接受的。如果将结果保存在单独的表中,则会使应用程序代码复杂化,就像@Justin Cave所说的那样,您将负责确保手动聚合的数据同步。原始表的数据。

#4 楼

不是Oracle员工,而是另一个用例是第三方解决方案。他们通常不支持您对其设计进行更改,但是MV对他们的代码“不可见”,但可以访问自定义报告/数据摘录。

它不是免费的,因为它将花费存储成本和潜在的有影响的插入/更新时间成本,但可能会因检索物化数据而不是“直接查看”或创建实际表而花费的时间被抵消并维护周围的ETL。

最后,这样做可能会使您与供应商的支持合同无效,请咨询您的律师-blah-blah-blah

#5 楼

让我解释一下视图,而不是直接去查看物化视图。

基本上,视图在逻辑上与表不同。如果要向用户隐藏某些列,则不能使用表。创建视图可以实现安全性。用例:如果一个视图与10个表在内部相关联,并且具有group by且函数具有数百万行,则执行该过程将花费大量时间。

因此,物化视图帮助我们更快地获取数据。
物化视图实际上存在于数据库中。每当基表更新时,物化视图都会更新。


物化视图会根据查询定义定期更新,而表则无法执行此操作。


#6 楼

可以将实例化视图设置为定期自动刷新。一个表可能需要其他代码来截断/重新加载数据。

示例:可以将具有来自多个表的数据的实例化视图设置为在非高峰时段自动刷新。物理表将需要其他代码来截断/重新加载数据。

可以在实例化视图而不是表中更好地控制安全性。

#7 楼

物化视图是一个包含查询结果的数据库对象。它们是位于远程的数据的本地副本,或用于基于表数据的聚合来创建摘要表。
http://www.oraappdata.com/2016/04/materialized-view.html

评论


请注意,问题不是关于实体化视图是什么,而是关于为什么以及如何使用它。

–闪烁
17年2月7日在8:53