我正在使用Microsoft SQL Azure v12.0託管的數據庫工作我使用索引顧問來幫助確定索引真正有益的地方,而不會超過索引我的數據庫。如何在索引視圖中模擬不同的計數?
我遇到了索引視圖會真正幫助消除每次有人運行查詢時需要大量數據的情況。
我試圖爲我的一張表製作索引視圖時遇到了一個令人費解的錯誤。
這是我數據庫中很常見的情況,所以我想知道是否有一個全面的通用解決方案,我可以在需要時重新調整用途。
我收到的錯誤是這樣的:
消息10126,級別16,狀態1,行12
不能創建視圖 「Database.dbo.vwCountDistinctExampleIX」 指標,因爲它使用了聚合 「COUNT_BIG
」與DISTINCT
關鍵字。
...
考慮使用GROUP BY
或COUNT_BIG(*)
視圖來模擬分組列上的DISTINCT
。
這個問題出現在我需要COUNT_BIG (DISTINCT {expression})
時,這在索引視圖中顯然是不允許的。
錯誤消息似乎在暗示,你可以模擬COUNT DISTINCT
行爲和使用DISTINCT
,這將是非常好的,因爲它可以讓我索引列得到相同的結果沒有又一次有助於消除另一種昂貴GROUP BY
條款常見的查詢(因爲執行計劃只能引用索引,而不是反覆重組表數據)。
我真的不明白COUNT_BIG (*)
在這方面的工作原理,所以我不明白錯誤信息是什麼意思。
有沒有一種方法可以在不使用DISTINCT
的情況下獲得該總值,同時仍然能夠對聚合列進行索引?
CREATE VIEW [vwCountDistinctExampleIX] WITH SCHEMABINDING AS SELECT
[T1].[ID] ,
COUNT_BIG (DISTINCT [T2].[Field2]) AS [DistinctTotal] ,
COUNT_BIG (*) AS [CountStar]
FROM [dbo].[Table1] [T1]
JOIN [dbo].[Table2] [T2] ON [T2].[Field1] = [T1].[ID]
GROUP BY [T1].[ID]
GO
CREATE UNIQUE CLUSTERED INDEX [PK vwCountDistinctExampleIX ID] -- Error here
ON [vwCountDistinctExampleIX] ([ID])
CREATE INDEX [IX vwCountDistinctExampleIX DistinctTotal]
ON [vwCountDistinctExampleIX] ([DistinctTotal])
GO