0

私は indexed view を持っていますFooView

それに対して次のインデックスを作成しました。

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

に対してHINTを使用することは可能IX_Foo2ですか? ヒントIX_Foo1を使うと使い続けられます。WITH (NOEXPAND)

4

1 に答える 1

2

はい、これは完全に簡単です

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

実行計画

(ただし、ヒントを使用してインデックスを強制すると、選択をオプティマイザに任せるよりも高価な計画になることに注意してください)

ここに画像の説明を入力

于 2015-03-18T21:00:51.130 に答える