视图与索引视图或物化视图之间的区别

Posted

技术标签:

【中文标题】视图与索引视图或物化视图之间的区别【英文标题】:difference between view and indexed view or materialized view 【发布时间】:2018-09-14 07:03:02 【问题描述】:

我对这两个感到困惑,并试图找出差异,但没有得到我正在寻找的特定内容。

在哪里使用索引视图而不是普通视图。 它们之间的一些重要区别。

【问题讨论】:

@MJH 如果您没有答案,请跳过它,正如我在问题中提到的那样,我试图弄清楚这意味着我对它进行了一些研究。我非常清楚这个网站的目的。 @Evaldas Buinauskas 很好地回答了我的问题。谢谢 【参考方案1】:

主要区别在于物化视图很好,物化了。这基本上意味着数据被持久化到由 SQL Server 自身维护的 虚拟 表中。

这既有好处也有问题。显着的好处:

可以将常用查询封装在视图中并编制索引,以提高读取性能(比较从单个表运行 select 与例如 5 个连接的表) 可以预先计算聚合,还可以提高读取性能

缺点:

这肯定会影响写入性能,因为对于每个 DML 操作,SQL Server 都必须更新视图。这可以在执行计划中观察到 如果订阅者从复制表创建材料视图,则会对复制性能产生负面影响 为了创建索引视图有很多限制 如果您使用的是非企业版 SQL Server,则必须添加 WITH (NOEXPAND) 提示,否则 SQL Server 将展开视图并在其中运行 SQL 语句,完全忽略索引。 DBA 通常倾向于避免使用它们,因为它们会增加额外的维护。

【讨论】:

请不要使用 Oracle 特定的术语来指代 SQL Server 特定的类似函数。 SQL Server 有索引视图,而不是具体化视图。 在索引视图时,需要进行模式绑定。这意味着,在索引视图存在之前,无法修改视图架构中使用的所有内容。而且,如果您通过 t-sql 执行模式编辑,一些相关对象可能会被静默删除。示例:您有索引视图,并对其进行全文搜索。 @Damien_The_Unbeliever 物化视图不是 Oracle 特定的术语;它实际上就是索引视图。 @Damien Microsoft 文档将其称为材质视图。 docs.microsoft.com/en-us/azure/architecture/patterns/…,也非常欢迎您编辑我对正确术语的回答。【参考方案2】:

Views (unindexed) 实际上只不过是一种将查询放在一个漂亮、干净、类似表格的东西中的方法。它不占用空间,因为在查询之前它不包含任何内容。对于可以或不能在所述查询中输入的内容几乎没有任何限制。

索引视图就是他们所说的。它们是视图,但已编入索引。这意味着它将视图具体化并通过事务日志和其他内容使其保持最新。

为什么不索引每个视图?基本上,它们带有一系列限制、潜在的维护和阻塞问题,并且您失去了正常视图的许多轻量级特性。

一天结束,如果您需要索引视图,则需要索引视图。但默认情况下,它们可能带来的麻烦多于其价值。

【讨论】:

以上是关于视图与索引视图或物化视图之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

PG 物化视图

oracle物化视图不会自动更新是怎么回事

使用 dbt 的物化视图与表

SQL Server索引视图以(物化视图)及索引视图与查询重写

Cassandra 索引与物化视图

Oracle DB表与视图的关系(物化视图)