Я выполняю вложенный SELECT для создания производной таблицы hourly
, которая получает меня почасовые усреднения по доступности функции. Используя hourly
, я усредняю все эти значения для получения среднесуточного значения, и я хочу создать индексный вид дневных средних значений. Мой запрос выглядит следующим образом:Невозможно создать индексированный вид, потому что я ссылаюсь на производную таблицу
CREATE VIEW DailyView WITH SCHEMABINDING AS
SELECT hourly.Feature,
AVG(hourly.AvgAvailability) AS AvgAvailability,
CAST(hourly.DateTime AS date) AS Date FROM
(SELECT DISTINCT
SC.Feature,
AVG(SA.Availability) AS AvgAvailability,
SA.DateAndHour AS DateTime
FROM dbo.ServiceAvailability AS SA LEFT OUTER JOIN
dbo.ServiceCatalog AS SC ON SA.ServiceID = SC.ServiceID
GROUP BY SC.Feature, SA.DateAndHour) hourly
GROUP BY hourly.Feature, CAST(hourly.DateTime AS date)
GO
CREATE UNIQUE CLUSTERED INDEX IDX_V1 ON DailyView(Date)
GO
Однако, я не могу создать индексированного представления таким образом, как я получаю следующее сообщение об ошибке:
Cannot create index on view "Reporting.dbo.DailyView" because it references derived table "hourly" (defined by SELECT statement in FROM clause). Consider removing the reference to the derived table or not indexing the view.
Это важно для меня индексировать эту точку зрения, как мы будем работа с большими объемами данных, но я не уверен, как получить вложенную среднюю таблицу без производной таблицы.
Не могли бы вы создать представление * без * подзапроса и создать кластерный индекс на нем, а затем просто присоединиться к этому подзапросу, когда вам нужно? –
Прежде чем вы начнете создавать индексированный просмотр, вы пробовали различные методы настройки производительности, такие как индексы, превращая 'CAST (hourly.DateTime AS date)' в расчетный столбец с индексом и т. Д. –
Оба хороших предложения. Я посмотрю на них. – wemblem