2014-12-02 42 views
3

我執行嵌套的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.

這對我來說是很重要的指標這一觀點,因爲我們將處理大量的數據,但我不知道如何在沒有派生表的情況下獲得嵌套平均值。

+2

您可以創建視圖*而不需要子查詢,並創建一個聚集索引,然後在需要時加入該子查詢? – 2014-12-02 21:50:19

+2

在創建索引視圖之前,您是否嘗試過各種性能調整方法,例如索引,將CAST(hourly.DateTime AS date)'轉換爲包含索引等的計算列。 – 2014-12-02 21:55:16

+0

這兩個好的建議。我會研究這些。 – wemblem 2014-12-02 22:07:31

回答

1

問題不在於子查詢本身。 您無法在索引視圖中使用AVG。使用SUM和COUNT_Big代替,所以當你查詢這個視圖時,你可以計算出平均值。 LEFT JOINs也是不允許的。只有內部聯接

您可以檢查是否可以在與正確的索引結合進行更改後爲派生表創建索引視圖。

相關問題