如何为MS-SQL Server索引视图提供索引提示?

时间:2015-03-17 06:00:58

标签: sql-server-2012 non-clustered-index indexed-view

我有一个索引视图FooView

我已经针对它创建了以下索引:

  • CREATE UNIQUE CLUSTERED INDEX IX_Foo1 ON [FooView](SomeId, AnotherId)
  • CREATE NONCLUSTERED INDEX IX_Foo2 ON [FooView](SomeId)

是否可以针对IX_Foo2使用提示?当我使用IX_Foo1提示时,它会继续使用WITH (NOEXPAND)

1 个答案:

答案 0 :(得分:1)

是的,这非常简单

CREATE TABLE dbo.FooTable
  (
     SomeId    INT,
     AnotherId INT,
     Filler    CHAR(8000)
  );

go

CREATE VIEW dbo.FooView
WITH SCHEMABINDING
AS
  SELECT SomeId,
         AnotherId,
         Filler
  FROM   dbo.FooTable

GO

CREATE UNIQUE CLUSTERED INDEX IX_Foo1
  ON dbo.FooView(SomeId, AnotherId)

CREATE NONCLUSTERED INDEX IX_Foo2
  ON dbo.FooView(SomeId)

GO

SELECT SomeId
FROM   dbo.FooView WITH (noexpand) --No hint non clustered index chosen automatically

SELECT *
FROM   dbo.FooView WITH (noexpand) --No hint clustered index chosen automatically

SELECT *
FROM   dbo.FooView WITH (noexpand, INDEX = IX_Foo2) --With hint nonclustered index forced

执行计划

(请注意,使用提示强制索引导致的计划比将选择留给优化器更昂贵)

enter image description here