dac*_*cot 345

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

视图仅为虚拟视图,每次访问时都会运行查询定义.

  • 此外,当您需要对不需要更新的数据执行时,物化视图会更好,但您的数据将比标准视图中的旧数据更旧.通常,BI报告从物化视图中获益良多. (53认同)
  • @Marthinus - 这是正确的,除非在物化视图的情况下是REFRESH ON COMMIT - MV将准确返回已提交的数据. (29认同)
  • @dacracot谢谢!我认为你的意思是说除了DISK中的DB表之外; 此MVIEW还通过解析所有连接来维护表.这样在运行时单表访问就足够了; 并且不需要查询多个表以获取通常由普通视图完成的连接条件.谢谢! (5认同)
  • DISK基于什么意思?这是不是意味着表不是DISK的一部分?它存储在一个文件中,DISK访问速度更快,文件访问.... (2认同)
  • @KanagaveluSugumar 是的,实际的表也被写入磁盘。 (2认同)

Mik*_*ter 324

查看

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

视图的优点是它始终向您返回最新数据.视图缺点是它的性能取决于视图所基于的select语句的好坏程度.如果视图使用的select语句连接许多表,或者使用基于非索引列的连接,则视图可能表现不佳.

物化观点

它们与常规视图类似,因为它们是数据的逻辑视图(基于select语句),但是,基础查询结果集已保存到表中.这样做的好处是,当您查询实体化视图时,您正在查询表,该也可能被编入索引.

此外,由于所有连接都已在物化视图刷新时解决,因此您需要支付一次连接的价格(或者在刷新实体化视图时),而不是每次从实体化视图中进行选择.此外,通过启用查询重写,Oracle可以优化从物化视图源中进行选择的查询,使其从物化视图中读取.如果您将实体化视图创建为聚合表的形式,或者作为频繁执行的查询的副本,则可以大大加快最终用户应用程序的响应时间.但缺点是,从物化视图返回的数据仅与上次刷新物化视图时的数据一致.


物化视图可以设置为手动刷新,按设定的计划,或基于数据库检测来自其中一个基础表的数据更改.物化视图可以通过将它们与物化视图日志相结合来逐步更新,后者充当基础表上的变更数据捕获源.

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


物化视图还有助于保证一致的时刻,类似于快照隔离.

  • +1的详细解释,但查询重写的缺点是什么?如果查询重写将允许Oracle进一步优化查询,那么我们应该总是启用查询重写,不是吗? (9认同)
  • @Rosdi,他说:"从物化视图中获取的数据仅与最后一次刷新物化视图时一样是最新的" (6认同)

Jer*_*hka 49

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

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

物化视图主要用于在不可行或不希望使用应用了索引的标准视图时提高应用程序性能.物化视图可以通过触发器或使用ON COMMIT REFRESH选项定期更新.这确实需要一些额外的权限,但这并不复杂.ON COMMIT REFRESH至少从Oracle 10开始就已经存在.

  • 有一个可以在物化视图上指定的“REFRESH ON COMMIT”选项 (2认同)

小智 20

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


fn2*_*n27 18

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

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


小智 6

视图:视图只是一个命名查询。它不存储任何内容。视图上存在查询时,它将运行视图定义的查询。实际数据来自表。

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


Ste*_*w S 5

添加迈克·麦卡利斯特相当彻底的答案......

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

当您创建物化视图时,您会发现 Oracle 同时创建 mview和 作为具有相同名称的表,这可能会使事情变得混乱。


Dhi*_*tam 5

物化视图是由选择查询驱动的数据逻辑视图,但查询的结果将存储在表或磁盘中,查询的定义也将存储在数据库中。

物化视图的性能比普通视图更好,因为物化视图的数据将存储在表中,并且表可以建立索引,因此连接速度更快,并且连接是在物化视图刷新时完成的,因此无需每次触发join 语句与视图的情况一样。

其他区别包括,在视图的情况下,我们总是获取最新数据,但在物化视图的情况下,我们需要刷新视图才能获取最新数据。对于物化视图,我们需要一个额外的触发器或一些自动方法,以便我们可以保持 MV 刷新,这对于数据库中的视图来说不是必需的。