Sql-Server
未使用索引視圖 - SQL Server
我有一個包含多個連接的查詢,它需要很長時間才能返回一個日期的數據。我已經創建了一個索引視圖。在創建視圖和索引時,我適當地設置了所有必需的選項。
我想利用索引視圖的優勢,如果我在其他地方有類似的查詢或完全相同的查詢,查詢優化器會選擇索引視圖以提高性能。我嘗試使用與創建索引完全相同的查詢(帶有額外的日期過濾器),但查詢計劃似乎沒有改變。即使我在查詢中明確使用視圖,視圖上的索引仍然沒有使用。我只能讓查詢優化器使用帶有 noexpand 提示的索引。請注意,我使用的是 SQL Server 企業版。
有什麼建議?
如果優化器認為它可以使用基表做得更好,這種情況經常發生。
如果我創建一個索引視圖,我傾向於總是使用 NOEXPAND 讓它使用它。我還比較了查詢統計資訊以確保它增加了一些好處。也就是說,如果我確定了一個有用的索引視圖,我希望優化器始終使用它。
例子:
SET STATISTICS IO ON; SET STATISTICS PROFILE ON; SET STATISTICS TIME ON; SELECT * FROM MySchema.myIndexedView ACB WITH (NOEXPAND) WHERE ...; SELECT * FROM MySchema.myIndexedView ACB WHERE ...;
請注意,根據版本,您可能會遇到謂詞推送問題。
請注意,這個答案是通用的,因為我們沒有要查看的程式碼和查詢