在Oracle中,视图和物化视图之间有什么区别?
它们评估视图定义下的表中的数据,在查询视图时。 它是你的表的逻辑视图,没有数据存储在其他地方。
视图的优点是,它将总是返回最新的数据给你。 视图的缺点是,它的性能取决于视图所基于的选择语句的好坏。 如果视图使用的选择语句连接了许多表,或者使用了基于非索引列的连接,那么视图的性能可能会很差。
它们类似于常规视图,因为它们是数据的逻辑视图(基于选择语句),但是,底层的查询结果集已经保存到表。 这样做的好处是,当你查询一个物化视图时,你是在查询一个表,这个表也可能是有索引的。
此外,由于所有的连接都已经在物化视图刷新的时候被解析,所以你只需支付一次连接的代价(或者按照你刷新物化视图的频率),而不是每次从物化视图中选择。 此外,启用查询重写后,Oracle可以优化从你的物化视图的源头选择的查询,使其改为从你的物化视图读取。 在你创建物化视图作为聚合表的形式,或者作为经常执行的查询的副本的情况下,这可以大大加快你的终端用户应用程序的响应时间。 但的缺点是,你从物化视图中得到的数据只有上次物化视图被刷新时才是最新的。
可将物化视图设置为手动刷新、按设定的时间表刷新或基于数据库检测到底层表之一的数据变化。 物化视图可以通过将其与物化视图日志结合起来进行增量更新,物化视图日志作为底层表的变更数据捕获源。
物化视图最常用于数据仓库/商业智能应用中,在这些应用中,如果查询具有数千百万行的大型事实表,会导致查询响应时间过长,从而导致应用无法使用。
物化视图也有助于保证时间上的一致性,类似于【快照隔离】(https://en.wikipedia.org/wiki/Snapshot_isolation)。
视图使用查询来从底层表格中提取数据。
物化视图是磁盘上的一个表,包含查询的结果集。
物化视图主要用于提高应用程序的性能,当使用带有索引的标准视图不可行或不可取时。物化视图可以通过触发器或使用 "ON COMMIT REFRESH "选项来定期更新。这确实需要一些额外的权限,但这并不复杂。至少从Oracle 10开始,"ON COMMIT REFRESH "就已经存在了。