你为什么要把一个索引放在一个视图上?
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
分配(实际上只有SUM
和COUNT_BIG
)。 这是索引需要维护的,对基础表的更新可以及时更新视图。
下面的链接提供了更好的措辞信息,尤其是在性能提升的部分。 希望能帮助到你
您在视图上创build索引的原因与在基表上相同:可以提高对该视图的查询性能。 这样做的另一个原因是实现一些唯一性约束,你不能对基表实现。 SQL Server不幸的是不允许在视图上创build约束。