你为什么要把一个索引放在一个视图上?

Microsoft SQL Server允许您为视图添加索引,但为什么要这样做呢?

我的理解是,一个视图实际上只是一个子查询,即如果我说SELECT * FROM myView,我真的说SELECT * FROM(myView的查询)

看起来底层表上的索引似乎是最重要的索引。 那么为什么你要在视图上单独索引?

如果视图被编入索引,那么任何可以使用索引来回答的查询将永远不需要引用基础表。 这可以导致性能的巨大提高。

本质上,数据库引擎在更新基础表时维护查询的“已解决”版本(或更确切地说是查询的索引),然后在可能的情况下使用已解决的版本而不是原始表。

这是“数据库日志”中的一篇好文章 。

Microsoft SQL Server允许您为视图添加索引,但为什么要这样做呢?

加快查询速度

我的理解是,一个视图实际上只是一个子查询,即如果我说SELECT * FROM myView,我真的说SELECT * FROM(myView的查询)

不总是。

通过在视图上创build聚簇索引,可以实现视图,并更新基础表,实际更新视图。 针对该视图的查询可能访问或不访问基础表。

并非所有视图都可以被索引。

例如,如果您在视图中使用GROUP BY ,那么它应该包含一个COUNT_BIG并且其中的所有聚合函数应该通过UNION ALL分配(实际上只有SUMCOUNT_BIG )。 这是索引需要维护的,对基础表的更新可以及时更新视图。

下面的链接提供了更好的措辞信息,尤其是在性能提升的部分。 希望能帮助到你

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

您在视图上创build索引的原因与在基表上相同:可以提高对该视图的查询性能。 这样做的另一个原因是实现一些唯一性约束,你不能对基表实现。 SQL Server不幸的是不允许在视图上创build约束。