Oracle中的Views和Materialized Views有什么区别?

Oracle中的Views和Materialized Views有什么区别?

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

视图只是虚拟的,并在每次访问时运行查询定义。

视图在查询视图时评估视图定义下的表中的数据。 这是您的表的逻辑视图,没有数据存储在其他地方。 一个观点的好处是,它将始终将最新的数据返回给你。 视图的缺点在于其性能取决于视图所依据的select语句的好坏程度。 如果视图使用的select语句连接多个表,或者使用基于非索引列的连接,则视图可能performance不佳。

实体化视图与常规视图类似,因为它们是数据的逻辑视图(基于select语句),但是,底层查询结果集已保存到表中。 这样做的好处是,当你查询一个物化视图时,你正在查询一个表,这个表也可能被索引。 另外,因为所有的连接都在物化视图刷新的时候被解决了,你只需要支付一次连接的价格(或者刷新你的物化视图的频率),而不是每次从物化视图中select。 另外,在启用查询重写的情况下,Oracle可以优化一个查询,从您的物化视图的源中进行select,以便从您的物化视图中读取数据。 在将物化视图创build为聚合表格forms或者作为频繁执行的查询副本的情况下,这可以大大加快最终用户应用程序的响应速度。 但不利的一面是,从物化视图返回的数据只是最新的物化视图刷新的数据。

物化视图可以设置为手动刷新,按照设定的时间表进行刷新,也可以基于数据库检测到其中一个基础表的数据更改。 物化视图可以通过将物化视图与物化视图日志相结合进行递增更新,物化视图日志充当底层表上的变更数据捕获源。

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

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

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

物化视图主要用于提高应用程序的性能,当不适用或不需要使用应用了索引的标准视图时。 缺点是你必须使用触发器或其他一些自动方法来使物化视图保持最新状态。

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

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

非细节化视图 – 从底层表中提取数据的查询

一个视图只不过是一个SQL查询,将查询的输出显示为一个虚拟表,它不占用任何存储空间或包含任何数据

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

迈克·麦卡利斯特(Mike McAllister)的回答非常透彻

实体化视图只能设置为在编译器认为视图查询简单时通过数据库检测更改自动刷新。 如果它被认为太复杂了,它将不能设置本质上的内部触发器来跟踪源表中的更改,只更新mview表中的已更改的行。

当你创build一个物化视图时,你会发现Oracle创build了mview 和一个同名的表 ,这可能会让事情变得混乱。

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

物化视图:物理存储数据并定期更新。 在查询MV时,它从MV中提供数据。