视图与实例化视图

时间:2019-05-20 18:38:34

标签: database database-design view materialized-views

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

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

谢谢

1 个答案:

答案 0 :(得分:1)

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

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

使用实例化视图的主要原因是提高了性能。每次我们从视图中选择时,我们都会执行整个查询。如果这是一个昂贵的查询,那就是我们每次都要支付的费用。使用实例化视图,我们将磁盘空间换为时间。

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

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

以下仅是准则,既不完整也不独特

何时使用视图

  • 当我们想使查询可重用,共享和可控时
  • 当我们想为内部复杂性提供一个简单的界面时
  • 我们要对数据实施访问限制时

何时使用实例化视图

  • 当我们要对大量数据运行标准汇总(通常是汇总)查询时
  • 当我们需要来自另一个数据库的数据时,我们不能保证其可用性
  • 基本数据量足够大且性能要求足够严格以实现数据的成本效益的视图用例

问题的答案在the documentation(*)中。我无意改写那本精美的手册,但我会解决您的问题,因为从一开始我就被迫继续。

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

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