Database 什么是物化视图?

Database 什么是物化视图?,database,oracle,Database,Oracle,有人能用简单的日常英语向我解释一下什么是观点或物化观点吗?我一直在读关于物化视图的书,但我不明白。当然 普通视图是一个定义虚拟表的查询——实际上,表中没有数据,而是通过执行动态创建数据 物化视图是运行查询并将数据保存在实际表中的视图 当您告诉物化视图时,该视图中的数据将被刷新 几个用例: 我们有多个Oracle实例,其中我们希望在一个实例上有主数据,在其他实例上有一个合理的数据当前副本。我们不想假设它们之间的数据库链接总是处于运行状态。因此,我们在其他实例上设置了物化视图,使用诸如SELECTA

有人能用简单的日常英语向我解释一下什么是观点或物化观点吗?我一直在读关于物化视图的书,但我不明白。

当然

普通视图是一个定义虚拟表的查询——实际上,表中没有数据,而是通过执行动态创建数据

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

当您告诉物化视图时,该视图中的数据将被刷新

几个用例:

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

物化视图在查询重写中也很有用。假设您在数据仓库中有一个事实表,其中包含从图书馆借来的每本书,以及日期和借阅者。工作人员经常想知道一本书被借了多少次。然后构建一个物化视图,如select book_id、book_name、count*作为book_trans group by book_id、book_name从book_trans group借出,设置您想要的任何更新频率,通常是仓库本身的更新频率。现在,如果有人针对book_trans表对某本书运行这样的查询,Oracle中的查询重写功能将足够智能,可以查看物化视图,而不是遍历book_trans中的数百万行


通常,出于性能和稳定性的考虑,您正在构建物化视图——脆弱的网络,或者在非工作时间进行长时间的查询

是的。物化视图是在它们下面有一个基表的视图。您可以定义视图,Oracle会自动在其下创建基表

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

出于各种原因,它们是有用的。使用物化视图的一些示例如下:

1当引用时,复杂的视图可能需要很长时间才能执行

2复杂SQL中包含的视图可能会产生较差的执行计划,从而导致性能问题

3您可能需要通过慢速数据库链接引用数据

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

您可以指定完全刷新或部分刷新


有关完整信息,请参阅Oracle文档

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

例如,一个视图可能是一个查询,例如SELECT account、SUMPAINTION FROM payments GROUP BY account,表中有大量付款,但帐户不多。每次使用此视图时,必须读取整个表。对于物化视图,结果会立即返回

物化视图的一个重要问题是在底层数据更改时更新它们。在本例中,每次向payments表添加新行时,需要更新物化视图中表示帐户的行。这些更新可以同步或定期进行

视图基本上是一个命名的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*示例之类的查询重写为预计算表上的查询。这是非常强大的,因为您不需要更改原始代码

实体化视图有很多用途,但它们主要用于性能方面。其他用途包括:复制、复杂的协同工作 nstraint检查,优化器缺陷的解决方法

长版本:->

您尝试过吗?