视图和索引视图或物化视图之间的区别
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,因为它在被查询之前不包含任何内容。您可以或不能在上述查询中输入的内容几乎没有任何限制。
索引视图就是他们说的那样。它们是视图,但已编入索引。这意味着它具体化了视图并通过事务日志和其他东西使它保持最新。
为什么不索引每个视图?基本上它们带有一系列限制、潜在的维护和阻塞问题,并且您失去了普通视图的许多轻量级特性。
归根结底,如果您需要索引视图,则需要索引视图。但默认情况下,它们可能比它们的价值更麻烦。
我对这两者感到困惑,并试图找出差异,但没有得到我正在寻找的具体内容。
- 在哪里使用索引视图而不是普通视图。
- 它们之间的一些重要区别。
主要区别在于material化视图很好,material化了。这基本上意味着数据被保存到 虚拟 table 中,由 SQL 服务器本身维护。
这既有好处也有问题。无table 个好处:
- 可以将常用查询封装在视图中并建立索引,以提高读取性能(比较来自单个 table 的 运行ning select 与例如 5 table 加入)
- 聚合可以预先计算,也可以提高读取性能
缺点:
- 它肯定会影响写入性能,因为对于每个 DML 操作,SQL 服务器必须更新视图。这可以在执行计划中观察到
- 如果订阅者从复制的 table 创建 material 视图,它会对复制性能产生负面影响
- 创建索引视图有很多限制
- 如果您使用的是非企业SQL服务器版本,必须添加
WITH (NOEXPAND)
提示,否则SQL服务器将展开视图并且只会运行 SQL 中的语句并完全忽略索引。 - DBA 通常会避免使用它们,因为它们会增加额外的维护。
Views(未索引)实际上只不过是一种将查询放入一个漂亮、干净、类似 table 的东西的方法。它不占用 space,因为它在被查询之前不包含任何内容。您可以或不能在上述查询中输入的内容几乎没有任何限制。
索引视图就是他们说的那样。它们是视图,但已编入索引。这意味着它具体化了视图并通过事务日志和其他东西使它保持最新。
为什么不索引每个视图?基本上它们带有一系列限制、潜在的维护和阻塞问题,并且您失去了普通视图的许多轻量级特性。
归根结底,如果您需要索引视图,则需要索引视图。但默认情况下,它们可能比它们的价值更麻烦。