Database 视图与物化视图

Database 视图与物化视图,database,database-design,view,materialized-views,Database,Database Design,View,Materialized Views,视图和物化视图之间的实际区别是什么 我看过很多链接,他们说普通视图就像一个虚拟表,数据不能存储在磁盘上,以防物化数据存储在磁盘上。但从那里我没有得到什么像什么时候使用普通视图和什么时候使用物化视图。如果我创建两个视图,我可以在模式中看到它们。我想知道我们使用普通视图和物化视图的确切时间和地点。请给我提供一个实际的例子解决方案 谢谢视图只是一个存储的查询。这是一种保存一些复杂业务逻辑(联接、筛选器、派生值)的简便方法,因此可以重用它并与其他用户共享 物化视图也是保存查询的一种方式,但它物化了结果集

视图和物化视图之间的实际区别是什么

我看过很多链接,他们说普通视图就像一个虚拟表,数据不能存储在磁盘上,以防物化数据存储在磁盘上。但从那里我没有得到什么像什么时候使用普通视图和什么时候使用物化视图。如果我创建两个视图,我可以在模式中看到它们。我想知道我们使用普通视图和物化视图的确切时间和地点。请给我提供一个实际的例子解决方案


谢谢

视图只是一个存储的查询。这是一种保存一些复杂业务逻辑(联接、筛选器、派生值)的简便方法,因此可以重用它并与其他用户共享

物化视图也是保存查询的一种方式,但它物化了结果集。也就是说,它在磁盘上创建数据的副本

使用物化视图的主要原因是提高了性能。每次我们从一个视图中选择,我们都会执行整个查询;如果这是一个昂贵的查询,我们每次都要为此付出代价。通过物化视图,我们以磁盘空间换取时间

此外,我们可以像对待表一样对待物化视图:我们可以索引它们,我们可以添加键约束,我们甚至可以在外键中引用它们

不使用物化方法的主要原因是成本。它们会占用磁盘空间。它们也必须得到维护。默认情况下,物化视图是静态的,这意味着随着时间的推移,它们的数据逐渐变得陈旧。刷新物化视图可能会很麻烦(取决于底层查询)。而查询视图总是为我们提供最新的数据视图

以下仅为指南,既不完整也不明确

何时使用视图

  • 当我们想要使查询可重用、可共享和可控时
  • 当我们想要一个简单的接口而不是内部复杂度时
  • 当我们想要强制执行对数据的访问限制时
何时使用物化视图

  • 当我们想要对大量数据运行标准汇总(通常是聚合)查询时
  • 当我们需要来自另一个数据库的数据时,我们不能保证它的可用性
  • 当基础数据量足够大且性能要求足够严格,因此实现数据具有成本效益时,视图将显示用例

您问题的答案在中。我无意重写那本精美的手册,但我会回答你们的问题,因为我已经开始,注定要继续下去

  • 物化视图是来自一个或多个表的数据副本,可能位于其他模式甚至其他数据库中
  • 正如我所说,复制数据会带来开销。存储空间和处理陈旧数据是巨大的成本
  • 一个视图只是一个查询,实际上没有什么可索引的
  • select*from user\u extends,其中segment\u name='name of mview'
  • 提交时刷新不是免费的。它需要花费系统资源来执行(源表上的事务将花费更长的时间)。此外,许多物化视图只能支持完全按需刷新 (*)这是Oracle的文档,因为这是您的个人资料所建议的,但其他RDBMS平台也有类似的文档。

    @apc……1)您想说视图和物化视图都是保存查询和逻辑的便捷方法,但物化视图使用磁盘空间来复制数据,而普通视图没有,对吗?2) 还有一点让人困惑的是,如果两者都是保存查询和逻辑的简便方法,那么我们不使用物化视图的唯一原因就是因为它们占用了磁盘空间?3) 我们可以在物化视图中应用我们无法在视图中应用的索引?@apc……4)我们如何检查物化视图使用磁盘空间复制数据?5) 正如您所说,刷新物化视图可能会很麻烦,但在创建物化视图时,我们可以选择是在提交时刷新物化视图,还是在命令行上刷新物化视图,如果我们在提交时刷新,那么当任何用户插入数据并提交时,物化视图将获得自动?可能重复的