【问题标题】:SQL Server: Create index on viewSQL Server:在视图上创建索引
【发布时间】:2023-03-16 18:59:01
【问题描述】:

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

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

【问题讨论】:

  • 您的视图是否使用WITH SCHEMABINDING 选项正确创建?
  • 您当然可以制作索引视图,尽管它们有一些限制。如果没有更多信息,我们无法确定索引是否会对您有所帮助。

标签: sql-server indexing


【解决方案1】:

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

SELECT *
FROM MyView WITH (INDEX = MyIndex)

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

【讨论】:

【解决方案2】:

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

select *
from dbo.vwIndexedView WITH (NOEXPAND)
WHERE indexedColumn = 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 2011-02-16
    • 1970-01-01
    • 2010-11-04
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多