Sql-Server

未使用索引視圖 - SQL Server

  • March 14, 2013

我有一個包含多個連接的查詢,它需要很長時間才能返回一個日期的數據。我已經創建了一個索引視圖。在創建視圖和索引時,我適當地設置了所有必需的選項。

我想利用索引視圖的優勢,如果我在其他地方有類似的查詢或完全相同的查詢,查詢優化器會選擇索引視圖以提高性能。我嘗試使用與創建索引完全相同的查詢(帶有額外的日期過濾器),但查詢計劃似乎沒有改變。即使我在查詢中明確使用視圖,視圖上的索引仍然沒有使用。我只能讓查詢優化器使用帶有 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 ...;

請注意,根據版本,您可能會遇到謂詞推送問題

請注意,這個答案是通用的,因為我們沒有要查看的程式碼和查詢

引用自:https://dba.stackexchange.com/questions/36678