我在表上创建了视图,我想在这个视图上创建索引。当我只在视图上创建索引时,我的查询不使用索引,但是当我在表上创建索引并在视图上创建下一个相同索引时,查询使用索引。
我的视图是基于具有基于我的视图的同一表的其他列创建新列,因此我无法在表上创建索引,因为我无法修改此表。是否可以在视图上创建非聚集索引来改进我的查询?当我创建非聚集索引时,我的查询仅表扫描而不是使用非聚集索引。
我在表上创建了视图,我想在这个视图上创建索引。当我只在视图上创建索引时,我的查询不使用索引,但是当我在表上创建索引并在视图上创建下一个相同索引时,查询使用索引。
我的视图是基于具有基于我的视图的同一表的其他列创建新列,因此我无法在表上创建索引,因为我无法修改此表。是否可以在视图上创建非聚集索引来改进我的查询?当我创建非聚集索引时,我的查询仅表扫描而不是使用非聚集索引。
如果您的查询提及基表,则优化器只能在 Enterprise Edition 中使用视图上的索引。如果您的查询提到索引,您可以在查询中强制索引:
SELECT *
FROM MyView WITH (INDEX = MyIndex)
但请注意:如果优化器一开始就正确,可能会导致性能下降。
如果您使用模式绑定在视图上创建了第一个聚集索引,然后是常规索引,则可以在从视图中选择时使用 WITH (NOEXPAND),然后它“可能”使用您的新索引,即:
select *
from dbo.vwIndexedView WITH (NOEXPAND)
WHERE indexedColumn = 1