视图是否利用表索引

Zer*_*ity 10 index sql-server view materialized-view

我有一个带有聚集索引和 2 个非聚集索引的表。现在,在我看来,我正在从我的表中选择所有内容

create view dbo.MyView
as 
Select * from MyTable
Run Code Online (Sandbox Code Playgroud)

现在,当我在查询中使用这个视图时,我可以假设这个视图将利用在表上创建的索引。(即与Select * from MyTable 的工作方式相同)?或者我应该使用索引视图

补充问题

如果视图可以利用表索引,那么使用SELECT * FROM MyView Where SomeColumn = @someValue可能会严重影响性能(如果视图有大量数据,那么它在没有索引时会表现得像堆)。如何克服这个问题?除了使用 NOEXPAND(因为我使用的是企业版)

spa*_*dba 15

视图只是一个“保存的查询”。每当您访问视图时,仍会使用基表上的索引。

您不需要使用索引视图,除非视图包含您不想在每次查询视图时都执行的昂贵逻辑(聚合或连接)。请注意,即使视图被“物化”,优化器也可以直接访问基表及其索引,而完全忽略视图上的索引。

另请注意,保持视图上的索引与基表中的数据对齐是很昂贵的:每次写入基表之一时,您还必须更新视图上的索引。