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

difference between view and indexed view or materialized view

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

主要区别在于material化视图很好,material化了。这基本上意味着数据被保存到 虚拟 table 中,由 SQL 服务器本身维护。

这既有好处也有问题。无table 个好处:

  • 可以将常用查询封装在视图中并建立索引,以提高读取性能(比较来自单个 table 的 运行ning select 与例如 5 table 加入)
  • 聚合可以预先计算,也可以提高读取性能

缺点:

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

Views(未索引)实际上只不过是一种将查询放入一个漂亮、干净、类似 table 的东西的方法。它不占用 space,因为它在被查询之前不包含任何内容。您可以或不能在上述查询中输入的内容几乎没有任何限制。

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

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

归根结底,如果您需要索引视图,则需要索引视图。但默认情况下,它们可能比它们的价值更麻烦。