为什么不使用表而不是物化视图?

jra*_*ara 59 performance oracle view

我是 Oracle 数据库的新手。如果我理解正确的话,物化视图是将结果集保存为数据库中的物理表的视图,并且该视图/表根据某个参数进行刷新。如果视图保存为物理表,为什么不首先将数据存储到表中?那么使用物化视图代替表有什么好处呢?

Jus*_*ave 65

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

另一个主要好处是,根据设置,当用户对基表发出查询时,Oracle 可以使用查询重写来使用物化视图。因此,例如,如果您有一堆针对详细表的现有报告,这些报告生成每日、每月和每年的聚合结果,您可以在基表上创建一个物化视图,以每日级别聚合数据,优化器可以将该物化视图用于所有现有查询。这使得优化数据仓库中的报告工作负载变得更加容易,而无需尝试重​​写数十个报告以使用新的聚合表或混淆DBMS_ADVANCED_REWRITE以强制您自己重写查询。


Gor*_*ell 14

物化视图会在其基表更新时自动更新。

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

NoC*_*nce 10

使用 MV 的一个很好的例子是,有时您希望经常快速地聚合数据并从大表中获取此摘要信息。如果没有物化视图,您必须对某些表进行非规范化并通过代码维护聚合或重复扫描大量行。无论哪种方式都不总是可以接受的,特别是对于仪表板和类似的在线应用程序。如果您将结果保存在单独的表中,您的应用程序代码就会变得复杂,正如@Justin Cave 所说,您将负责确保手动聚合的数据是同步的。与原始表的数据。