Не удается создать CLUSTERED INDEX для View, потому что я ссылаюсь на одну и ту же таблицу дважды, любой обходной путь? - PullRequest
1 голос
/ 18 июня 2009

Я хочу создать индексированное представление, которое объединяет данные из нескольких таблиц, однако SQL Server выдает сообщение об ошибке:

Невозможно создать индекс для представления "MyView". Представление содержит само присоединение к "dbo.Companies".

Определение вида выглядит примерно так (упрощенная версия):

SELECT  T.Field1
      , T.Field2
      , P.CompanyName AS ProviderName
      , C.CompanyName AS CustomerName
      , T3.Field1
FROM dbo.Table1 T 
                  INNER JOIN dbo.Companies P ON T.ProviderId = T2.Id
                  INNER JOIN dbo.Companies C ON T.CustomerId = T2.Id
                  INNER JOIN dbo.Table3 ON T.Id = T3.Id

Есть ли обходной путь для этого случая? Я не хочу разбивать таблицу Companies на две таблицы.

Заранее спасибо.

1 Ответ

2 голосов
/ 18 июня 2009

Вы не сможете обойти это, индексированные представления должны соответствовать определенным ограничениям, перечисленным в Создание индексированных представлений . Помимо прочего, внешние и self объединения не поддерживаются (10-е ограничение сверху вниз). Это сводится к способности движка иметь возможность обновлять индекс представления при обновлении базовой таблицы.

Не зная всех деталей вашей модели данных, уверены ли вы, что индексированное представление необходимо и не хватит ли индексов базовой таблицы?

...