有没有人可以给我解释一下,在日常英语中,什么是视图或物化视图?我一直在读关于物化视图的文章,但我不明白。
发布于 2010-12-17 01:18:57
好的。
普通视图是定义虚拟表的查询--您实际上并没有将数据放在表中,而是通过执行来动态创建它。
实体化视图是运行查询并将数据保存在实际表中的视图。
实体化视图中的数据会在您告诉它刷新时刷新。
下面是几个用例:
select a,b,c from mytable@master等查询,并告诉它们刷新daily.select book_id, book_name, count(*) as borrowings from book_trans group by book_id, book_name形式的实例化视图,将其设置为您想要的任何更新频率--通常是仓库本身的更新频率。现在,如果有人对Oracle表运行类似于特定书籍的查询,book_trans中的查询重写功能将足够智能,可以查看实例化视图,而不是遍历book_trans中的数百万行。通常,您构建物化视图是出于性能和稳定性的原因--不稳定的网络,或者在非工作时间执行长时间的查询。
发布于 2010-12-17 01:25:15
一个视图基本上是一个“命名的”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
发布于 2010-12-17 01:23:25
视图是对一个或多个表的查询。视图可以像表一样使用,以便从其他表或视图中进行选择或与其他表或视图联接。度量化视图是一种经过充分评估的视图,其行已存储在内存或磁盘中。因此,每次从实体化视图中进行选择时,都不需要执行生成视图的查询,结果会立即返回。
例如,一个视图可能是一个查询,比如SELECT account, SUM(payment) FROM payments GROUP BY account,在表中有大量的付款,但没有很多账户。每次使用此视图时,必须读取整个表。使用实例化视图,可以立即返回结果。
物化视图的一个很重要的问题是在底层数据发生变化时更新它们。在此示例中,每次向payments表中添加新行时,都需要更新实体化视图中表示帐户的行。这些更新可以同步进行,也可以定期进行。
https://stackoverflow.com/questions/4463354
复制相似问题