SQL Server索引视图

4

好的,我对使用SQL Server索引视图(使用2008版本)感到困惑。

我有一个名为AssignmentDetail的索引视图。

当我查看执行计划时:

select * from AssignmentDetail

它显示了索引视图所抽象的所有其他表的基础索引的执行计划。

我认为执行计划只是PK_AssignmentDetail(我的视图的聚集索引的名称)的聚集索引扫描,但实际上并不是这样。

这个索引视图似乎没有性能提升,我该怎么办?是否应该创建一个包含所有列的非聚集索引,以便避免访问所有其他索引?

任何见解都将不胜感激。

2个回答

5

SQL Server企业版智能地查找和利用索引视图。但是,如果您没有运行企业版,则需要显式地告诉它使用索引视图,如下所示:

select * 
from AssignmentDetail WITH (NOEXPAND)

2
索引视图的目的并不是为了加速查询。
SELECT * FROM MyView

它将帮助您提高性能的东西是视图本身列上的索引,比如。
SELECT * FROM MyView WHERE ViewColumnA = 'A' and ViewColumnB = 'B'

因此,您可以在ViewColumnA和ViewColumnB上创建索引,这些索引实际上可以存在于不同的表中。

1
关于“选择*不是重点”的问题——为什么?当基础视图包含22个连接,16个过滤器和马戏团小马无法加速实体化时,建立索引视图的一个重点不就是加快它的实现吗? - EBarr
@EBarr 这要看小马是什么颜色了。 - D'Arcy Rittich
@RedFilter - 白色和灰色,配有橙色的鬃毛;毕竟这是StackOverflow。 - EBarr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接