Oracle中的视图和物化视图有什么区别?
当前回答
再加上迈克·麦卡利斯特相当彻底的回答……
物化视图只能设置为在编译器认为视图查询简单时,通过数据库检测更改来自动刷新。如果它被认为太复杂,它将无法设置本质上是内部触发器来跟踪源表中的更改,从而仅更新mview表中已更改的行。
在创建物化视图时,您会发现Oracle将mview和表都创建为同名的表,这可能会让人感到困惑。
其他回答
视图使用查询从底层表中提取数据。
物化视图是磁盘上的一个表,其中包含查询的结果集。
物化视图主要用于在不可行或不希望使用应用索引的标准视图时提高应用程序性能。物化视图可以通过触发器或使用on COMMIT REFRESH选项定期更新。这确实需要一些额外的权限,但并不复杂。ON COMMIT REFRESH至少从Oracle 10开始就存在了。
物化视图是由选择查询驱动的数据的逻辑视图,但查询的结果将存储在表或磁盘中,查询的定义也将存储在数据库中。
实体化视图的性能比普通视图好,因为实体化视图的数据将存储在表中,表可以被索引,因此连接更快,连接是在实体化视图刷新时完成的,因此不需要每次都像视图那样触发连接语句。
其他不同之处在于,在视图中,我们总是获得最新数据,但在物化视图中,我们需要刷新视图以获得最新数据。 在物化视图的情况下,我们需要一个额外的触发器或一些自动方法,以便我们可以保持MV刷新,这对于数据库中的视图是不需要的。
再加上迈克·麦卡利斯特相当彻底的回答……
物化视图只能设置为在编译器认为视图查询简单时,通过数据库检测更改来自动刷新。如果它被认为太复杂,它将无法设置本质上是内部触发器来跟踪源表中的更改,从而仅更新mview表中已更改的行。
在创建物化视图时,您会发现Oracle将mview和表都创建为同名的表,这可能会让人感到困惑。
视图:视图只是一个命名查询。它不存储任何东西。当视图上有查询时,它将运行对视图定义的查询。实际数据来自表格。
物化视图:物理存储数据并定期更新。在查询MV时,给出MV的数据。
视图本质上是由给定查询动态填充的逻辑表状结构。视图查询的结果不会存储在磁盘上的任何地方,并且在每次执行查询时都会重新创建视图。物化视图是存储在数据库中并写入磁盘的实际结构。它们根据创建时定义的参数进行更新。
推荐文章
- 在SQL server查询中将NULL替换为0
- 在SQL中修改表的模式名
- 如何在SQL Server 2005的一条语句中更新两个表?
- 如何创建临时表与SELECT * INTO tempTable从CTE查询
- 用于查找计数为>的记录的SQL查询
- “从Table1左连接Table2”和“从Table2右连接Table1”可以互换吗?
- 在SQL Server的选择语句中使用带TOP的变量,而不是动态的
- 自然连接和内部连接的区别
- MySQL现在()+1天
- 在SQL中转换月号到月名函数
- 不可重复读和幻影读的区别是什么?
- 改变一个varchar列的最大长度?
- 外键约束:何时使用ON UPDATE和ON DELETE
- ORA-00054:资源繁忙,指定NOWAIT或超时获取
- 暂时关闭约束(MS SQL)