什么是物化观点?

时间:2010-12-16 17:01:12

标签: database oracle

有人可以向我解释一下普通日常英语中的观点或物化观点吗?我一直在阅读有关物化视图的内容,但我不明白。

5 个答案:

答案 0 :(得分:19)

不确定

普通视图是一个定义虚拟表的查询 - 您实际上没有数据位于表中,您可以通过执行来动态创建它。

物化视图是运行查询并将数据保存在实际表中的视图。

物化视图中的数据会在您告知时刷新。

一些用例:

  • 我们有多个Oracle实例,我们希望在一个实例上拥有主数据,并在其他实例上拥有合理的当前数据副本。我们不想假设它们之间的数据库链接始终处于运行状态。因此,我们使用select a,b,c from mytable@master之类的查询设置其他实例的实体化视图,并告诉他们每天刷新。

  • 物化视图在查询重写中也很有用。假设您在数据仓库中有一个事实表,每本书都是从图书馆借来的,包含日期和借阅者。而且工作人员经常想知道借书的次数。然后将物化视图构建为select book_id, book_name, count(*) as borrowings from book_trans group by book_id, book_name,将其设置为您想要的任何更新频率 - 通常是仓库本身的更新频率。现在,如果有人针对book_trans表运行针对特定书籍的查询,那么Oracle中的查询重写功能将足够智能地查看物化视图,而不是遍历{{1}中的数百万行}。

通常,您出于性能和稳定性原因构建物化视图 - 片状网络或长时间查询。

答案 1 :(得分:7)

视图基本上是“命名的”SQL语句。您可以在查询中引用视图,就像真正的表一样。访问视图时,将执行视图后面的查询。 例如:

create view my_counter_view(num_rows) as
   select count(*)
     from gazillion_row_table;

   select num_rows from my_counter_view;

视图可用于多种用途,例如提供更简单的数据模型,实现安全性约束,SQL查询重用,SQL缺点的解决方法。

实体化视图是一个已执行查询且结果已存储为物理表的视图。您可以在代码中引用实体化视图,就像真正的表一样。实际上, 是一个可以索引,声明约束等的真实表。 访问物化视图时,您正在访问预先计算的结果。您执行底层查询。有几种策略可以使物化视图保持最新状态。您可以在文档中找到它们。

物化视图很少直接在查询中引用。关键是让优化器使用“查询重写”机制在内部将查询(例如上面的COUNT(*)示例)重写为预计算表上的查询。这非常强大,因为您无需更改原始代码。

物化视图有很多用途,但它们主要用于性能原因。其他用途包括:复制,复杂的约束检查,优化器缺陷的解决方法。

长版: - > Oracle documentation

答案 2 :(得分:2)

视图是对一个或多个表的查询。视图可以像表一样用于选择或与其他表或视图连接。 metrialized视图是一个已经完全评估并且其行已存储在内存或磁盘上的视图。因此,每次从物化视图中进行选择时,都不需要执行生成视图的查询,并且会立即返回结果。

例如,视图可能是SELECT account, SUM(payment) FROM payments GROUP BY account之类的查询,表格中包含大量付款但帐户数量不多。每次使用此视图时,都必须读取整个表。使用物化视图,结果会立即返回。

物化视图的重要问题是在更改基础数据时更新它们。在此示例中,每次将新行添加到付款表时,物化视图中代表帐户的行都需要更新。这些更新可以同步或定期进行。

答案 3 :(得分:1)

是。物化视图是在其下方具有基表的视图。您可以定义视图,Oracle会自动在其下创建基表。

通过执行视图并将结果数据放在基表中,您可以获得性能。

它们因各种原因而有用。您将使用物化视图的一些示例如下:

1)复杂的视图在引用

时可能需要很长时间才能执行

2)复杂SQL中包含的视图可能会导致执行计划不良,从而导致性能问题

3)您可能需要通过慢速DBLINK

引用数据

可以设置物化视图以定期刷新。

您可以指定完整或部分刷新。

请参阅Oracle文档以获取完整信息

答案 4 :(得分:0)

物化视图是包含查询结果的数据库对象。它们是远程数据的本地副本,或用于根据表数据的聚合创建汇总表。

http://www.oraappdata.com/2016/04/materialized-view.html