2015-03-17 3 views
0

У меня есть индексный вид FooView.Как я могу указать подсказку индекса для индексированного представления MS-SQL Server?

Я создал следующие показатели против этого:

  • 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

Вы пытались добавить указательный указатель вместе с 'noexpand'? Если так, что случилось? –

+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

+1

Боковое примечание @MartinSmith - У меня такая же ситуация, когда я нажимаю подсказку (вместо нее, используя индекс кластера, который выбирается автоматически) ... он был менее результативным, и я хотел бы сделать это Key Lookup :( –