视图 VS 物化视图

Jas*_*ngh 4 database database-design view materialized-views

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

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

谢谢

APC*_*APC 13

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

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

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

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

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

以下只是指导方针,并不完整或明确

何时使用视图

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

何时使用物化视图

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

您的问题的答案在文档(*)中。我无意重写那本精美的手册,但我会回答你的问题,因为一旦开始,我就注定要继续下去。

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

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