代码之家  ›  专栏  ›  技术社区  ›  juan

Oracle中的视图和物化视图有什么区别?

  •  302
  • juan  · 技术社区  · 16 年前

    Oracle中的视图和物化视图有什么区别?

    8 回复  |  直到 16 年前
        1
  •  316
  •   WAF araknoid    9 年前

    物化视图基于磁盘,并根据查询定义定期更新。

    视图仅为虚拟视图,每次访问它们时都运行查询定义。

        2
  •  308
  •   community wiki 3 revs, 2 users 55% Mike Williamson    6 年前

    意见

    它们评估视图定义基础表中的数据 在查询视图时 . 它是表的逻辑视图,没有数据存储在任何其他地方。

    观点的好处在于 始终将最新数据返回给您 . 这个 一种观点的缺点是它的性能 取决于视图所基于的select语句的好坏。如果视图使用的SELECT语句联接多个表,或者使用基于非索引列的联接,则该视图的性能可能很差。

    物化视图

    它们类似于常规视图,因为它们是数据的逻辑视图(基于select语句),但是, 基础查询结果集已保存到表中 . 其好处是,当您查询物化视图时, 您正在查询表 ,也可以编制索引。

    此外,由于所有联接都是在物化视图刷新时解决的,因此您只需支付一次联接的价格(或在刷新物化视图时支付一次联接的价格),而不是每次从物化视图中选择联接时。此外,在启用了查询重写的情况下,Oracle可以优化从物化视图的源代码中选择的查询,而不是从物化视图中读取。在创建物化视图作为聚合表的形式或作为频繁执行的查询的副本的情况下,这可以大大加快最终用户应用程序的响应时间。这个 但缺点是,从物化视图返回的数据只有在上次刷新物化视图时才是最新的。 .


    物化视图可以设置为按设置的计划手动刷新,或者 基于数据库检测到某个基础表中的数据更改 . 物化视图可以通过将其与物化视图日志相结合来进行增量更新,这是 充当变更数据捕获源 在基础表上。

    物化视图最常用于数据仓库/商业智能应用程序,在这些应用程序中,查询具有成千上万行的大型事实表将导致查询响应时间,从而导致应用程序不可用。


    具体化的观点也有助于确保时间上的一致性,类似于 snapshot isolation .

        3
  •  47
  •   Jeremiah Peschka    6 年前

    视图使用查询从基础表中提取数据。

    物化视图是磁盘上包含查询结果集的表。

    物化视图主要用于在不可行或不希望使用带有索引的标准视图时提高应用程序性能。物化视图可以通过触发器或使用 ON COMMIT REFRESH 选择权。这确实需要一些额外的权限,但并不复杂。 提交时刷新 至少从Oracle10开始就已经到位。

        4
  •  17
  •   user12786    16 年前

    视图本质上是由给定查询动态填充的逻辑类表结构。视图查询的结果不存储在磁盘上的任何位置,每次执行查询时都会重新创建视图。物化视图是存储在数据库中并写入磁盘的实际结构。它们将根据创建时定义的参数进行更新。

        5
  •  16
  •   fn27    12 年前

    物化观点 -磁盘上包含查询结果集的表。

    非材料视图 -从基础表中提取数据的查询

        6
  •  2
  •   smshafiqulislam    7 年前

    观点: 视图只是一个命名查询。它不储存任何东西。当对视图进行查询时,它将运行对视图定义的查询。实际数据来自表。

    具体化观点: 物理存储数据并定期更新。在查询mv时,它提供mv的数据。

        7
  •  1
  •   Stew S    16 年前

    具体化视图只能设置为刷新 自动地 通过数据库在考虑视图查询时检测更改 简单的 由编译器编写。如果它被认为太复杂,它将无法设置基本上是内部触发器的内容来跟踪源表中的更改,从而只更新mview表中更改的行。

    当您创建物化视图时,您会发现Oracle创建了两个mview 作为一张同名的桌子 这会让事情变得混乱。

        8
  •  1
  •   Dlucidone    9 年前

    看法 只是一个SQL查询,获取查询的输出并使其看起来像一个虚拟表,它不占用任何存储空间或包含任何数据。

    但是 物化观点 是模式对象,它将查询结果存储在单独的模式对象中(即占用存储空间并包含数据)。这表示物化视图正在返回表数据的物理独立副本。