1

我在表上创建了视图,我想在这个视图上创建索引。当我只在视图上创建索引时,我的查询不使用索引,但是当我在表上创建索引并在视图上创建下一个相同索引时,查询使用索引。

我的视图是基于具有基于我的视图的同一表的其他列创建新列,因此我无法在表上创建索引,因为我无法修改此表。是否可以在视图上创建非聚集索引来改进我的查询?当我创建非聚集索引时,我的查询仅表扫描而不是使用非聚集索引。

4

2 回答 2

0

如果您的查询提及基表,则优化器只能在 Enterprise Edition 中使用视图上的索引。如果您的查询提到索引,您可以在查询中强制索引:

SELECT *
FROM MyView WITH (INDEX = MyIndex)

但请注意:如果优化器一开始就正确,可能会导致性能下降。

于 2013-11-13T15:17:23.490 回答
0

如果您使用模式绑定在视图上创建了第一个聚集索引,然后是常规索引,则可以在从视图中选择时使用 WITH (NOEXPAND),然后它“可能”使用您的新索引,即:

select *
from dbo.vwIndexedView WITH (NOEXPAND)
WHERE indexedColumn = 1
于 2021-06-14T19:49:36.510 回答