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

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

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

【问题讨论】:

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

标签: sql sql-server sql-server-2014


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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 2014-06-07
    • 2015-12-11
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    相关资源
    最近更新 更多