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

ISh*_*ubh 4 sql sql-server sql-server-2014

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

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

Eva*_*kas 6

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

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

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

缺点:

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

  • @Damien Microsoft 文档称之为材料视图。https://docs.microsoft.com/en-us/azure/architecture/patterns/materialized-view,也非常欢迎您编辑我对正确术语的回答。 (7认同)
  • 请不要使用 Oracle 特定术语来引用 SQL Server 特定的*类似*函数。SQL Server 有索引视图,而不是物化视图。 (4认同)
  • @Damien_The_Unbeliever 物化视图不是 Oracle 特定术语;它实际上就是索引视图。 (4认同)