SQL Server 中的视图

Posted

技术标签:

【中文标题】SQL Server 中的视图【英文标题】:Views in SQL Server 【发布时间】:2011-04-30 04:22:40 【问题描述】:

我们可以使用视图来提高查询的性能吗?

【问题讨论】:

看起来像是“如何制作论坛”的问题之一。能不能再含糊一点? 【参考方案1】:

如果设计得当,索引视图将提高查询性能。

http://technet.microsoft.com/en-us/library/cc917715.aspx

编辑:请注意,除非您使用的是 Enterprise Edition 或 Developer Edition,否则您需要指定 WITH (NOEXPAND) 提示以在您的选择中获得性能提升。

【讨论】:

+1 - 很高兴知道。我一直认为视图 100% 依赖于基础表。 物化视图受到了众所周知的限制(即:没有像 GETDATE() 这样的确定性函数)。而且这个答案没有解决非物化视图。【参考方案2】:

非物化视图可以从查询计划缓存中受益,并且根据设置可以支持谓词推送。谓词推送是优化器确定视图上的 WHERE 子句的地方:

SELECT v.* 
  FROM VIEW v
 WHERE v.column = 5

...可以推入用于构造视图的查询中:

SELECT *
  FROM VIEW_TABLE(S)
 WHERE column = 5

否则,可以将非物化视图视为宏——扩展为基础查询的占位符。这意味着根据使用情况,视图的性能可能比将底层查询合并到外部查询中更差。将视图层叠在一起并不是一种明智的做法,因为直到运行时才会遇到错误(使用视图的查询)。

物化视图(在 SQL Server 中称为索引视图)上至少有一个索引,并且可以像查询普通表一样快。

【讨论】:

【参考方案3】:

我不这么认为。这完全取决于查询中使用的表上的索引。我认为在任何数据库上使用视图都没有任何“性能”增益。唯一的收获是他们为您完成了联接工作。

【讨论】:

这个答案正确吗? technet.microsoft.com/en-us/library/cc917715.aspx【参考方案4】:

您至少应该看到视图的性能略有提升,因为它们基本上会告诉数据库引擎这些表是相关的。

如果您已为表启用并正确配置了索引。

否则,少量的性能提升只是因为数据库引擎已经知道它需要运行该基本语句。

【讨论】:

以上是关于SQL Server 中的视图的主要内容,如果未能解决你的问题,请参考以下文章

SQL-Server 视图中的 JAva 查询

SQL Server 中的视图

将参数传递给 SQL Server 中的视图

更新 SQL Server 中的视图连接列

sql server 2008怎么修改视图中的字段属性!!例如修改字段名和字段类型!

为啥要插入到 SQL Server 中的视图中? [关闭]