создать представление с индексами - PullRequest
1 голос
/ 28 марта 2011

Я хотел создать представление, которое будет иметь то же свойство, что и таблица, из которой оно запрашивает

CREATE VIEW Agent_View
AS 
SELECT * FROM Agent_table

Я хочу знать, нужно ли мне создавать те же индексы, что и Agent_table в Agent_View .

Нужно ли объявлять Agent_View как привязанный к схеме для создания индекса. Есть ли обходной путь для создания индексов без объявления схемы?

Ответы [ 3 ]

3 голосов
/ 28 марта 2011

Вы не можете создавать индексы для представления с помощью SELECT *, потому что у вас не может быть WITH SCHEMABINDING

Представление без индексов - это просто макрос, который все равно расширяется во внешний запрос.Так что табличные индексы будут использованы в любом случае.Представление не существует с точки зрения схемы.

Наконец, IMHO, это, возможно, наиболее бессмысленное использование представления.Это добавляет нулевое значение .

2 голосов
/ 28 марта 2011

Большинство (если не все) запросов к этому представлению будут вести себя так, как если бы вы непосредственно использовали нижележащую таблицу.

Таким образом, если вы проиндексировали agent_name в agent_table и выполнили запрос вроде:

select *
  from agent_view
 where agent_name = 'James Bond';

... оптимизатор переписал бы в:

select *
  from agent_table
 where agent_name = 'James Bond';

Будет ли индекс использоваться или нет - это другой вопрос.

1 голос
/ 28 марта 2011

Возможно, вы захотите создать индексированные представления, если у вас есть какие-либо сложные запросы, но в вашем случае будут использоваться индексы таблицы.

Ссылка MSDN

...