Невозможно создать индекс для представления «View_Table_Name», так как представление не привязано к схеме - PullRequest
48 голосов
/ 14 декабря 2011

Я использую представления в моей хранимой процедуре (SQL-Server). Для повышения производительности я попытался создать ИНДЕКС этого представления.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER VIEW VW_Table_Name
AS
SELECT Col1,Col2,Col3 FROM Table_Name 
GO
CREATE UNIQUE CLUSTERED INDEX Index_Name ON [VW_Table_Name](Col1)
GO

Здесь я получаю сообщение об ошибке типа

Сообщение 1939 г., уровень 16, состояние 1, строка 1 Невозможно создать индекс для представления «VW_FML», так как представление не привязано к схеме.

Можем ли мы создать индекс для просмотра в SQL Server?

Ответы [ 2 ]

72 голосов
/ 14 декабря 2011

Существует ряд ограничений на индексированные представления: нет подзапросов, нет объединений, нет внешних объединений и т. Д. См. эту статью для получения дополнительной информации.Но для вашего случая вам просто нужно создать представление с привязкой схемы.

CREATE VIEW VW_Table_Name WITH SCHEMABINDING
AS
SELECT Col1,Col2,Col3 FROM Table_Name 
GO
4 голосов
/ 01 июня 2015

Поскольку вы пытаетесь создать Индексированное представление или Материализованное представление .Обязательно для представления иметь опцию «WITH SCHEMABINDING», если вы создаете кластерный индекс поверх него.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...