2010-05-07 88 views
4

好,我很困惑的SQL Server索引视图

我有一个索引视图的SQL Server索引视图(使用2008)称为

AssignmentDetail

当我在看的执行计划

对于

select * from AssignmentDetail 

它表明索引视图应该抽象掉所有其他表的所有底层索引的执行计划。

我认为执行计划只会是PK_AssignmentDetail(我的视图的聚集索引的名称)的聚簇索引扫描,但它不会。

这个索引视图似乎没有性能增益我该怎么做?我是否也应该为所有列创建非聚集索引,以便它不必击中所有其他索引?

任何有识之士将不胜感激

回答

5

的SQL Server企业版是足够聪明地寻找和使用索引视图时,它们存在。不过,如果你没有运行企业版,你需要明确地告诉它使用索引视图,像这样:

select * 
from AssignmentDetail WITH (NOEXPAND) 
2

索引视图的点不加快

SELECT * FROM MyView 

它会帮助你提高性能的东西就是视图本身的一列,例如。

因此,您可以对ViewColumnA和ViewColumnB指数可能在不同的表中实际存在的。

+1

重新“选择*不是重点” - 怎么样?当底层视图包含22个连接,16个过滤器和一个马戏团小马时,不会加速实现索引视图点的实现**。 – EBarr 2012-09-28 18:11:07

+0

@EBarr取决于,小马是什么颜色? – RedFilter 2012-09-28 23:57:29

+0

@红色过滤器 - 白色和灰色,橙色鬃毛;毕竟这是StackOverflow。 – EBarr 2012-09-29 01:32:53