为什么不使用表格代替物化视图?


53

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

Answers:


59

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

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


14

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


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

10

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


4

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

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

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


2

而不是直接去的物化视图让我解释一下意见

基本上,视图在逻辑上与表不同。如果我们想向用户隐藏某些列,则不能使用表。创建视图可以实现安全性。

用例:如果一个视图在内部与10个表以及group by关联,并且函数具有数百万行,则执行将花费大量时间。

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

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


0

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

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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.