使用遺漏索引功能的限制

遺漏索引功能具有下列限制:

  • 不能用來微調索引組態。

  • 不能收集超過 500 個遺漏索引群組的統計資料。

  • 不能指定索引中使用的資料行順序。

  • 對於只涉及不相等述詞的查詢,傳回的成本資訊比較不精確。

  • 僅報告某些查詢的內含資料行,因此必須手動選取索引鍵資料行。

  • 只會傳回有關可能遺漏索引之資料行的原始資訊。

  • 它不建議已篩選的索引。

  • XML 執行程序表中重複出現的同一個遺漏索引群組,可能會傳回不同的成本。

  • 它不會考慮一般查詢計畫。

下列章節提供了關於這些限制的詳細資訊。

微調索引組態

遺漏索引功能是一種輕量型工具,用來尋找可大幅提升查詢效能的遺漏索引。它並未提供足夠的資訊讓您微調索引組態。請使用 Database Engine Tuning Advisor 來達成此目的。如需有關 Database Engine Tuning Advisor 的詳細資訊,請參閱<微調實體資料庫設計>和<相關的查詢微調功能>。

遺漏索引群組的最大數目

此功能最多只能收集 500 個遺漏索引群組的統計資料。達到此臨界值之後,便不會再收集任何遺漏索引群組資料。這個臨界值不是可微調參數,不能加以變更。

索引資料行順序

遺漏索引功能在建議索引時並未考慮最佳排序順序。請考量下列範例查詢:

SELECT column_a, column_b
FROM table_1
WHERE column_a < 10000
AND column_b < 10000
ORDER BY column_b, column_a

遺漏索引功能可能會建議索引,並將 column_a 列在 column_b 前面,但較有利的排序順序應該是 column_bcolumn_a,因為這個順序與查詢的排序順序相符。建立資料定義語言 (DDL) 陳述式以實作遺漏索引時,請檢查個別工作負載查詢,以選擇最佳排序順序。如需有關依據從遺漏索引功能收到的輸出在 CREATE INDEX 陳述式中排序資料行的詳細資訊,請參閱<使用遺漏索引資訊撰寫 CREATE INDEX 陳述式>。

僅涉及不相等述詞的查詢

遺漏索引功能使用最簡單的模式來產生僅涉及不相等述詞之查詢的成本資訊。因此,這些查詢所傳回成本資訊的精確度可能低於涉及等式之查詢所傳回的資訊。請考量下列不包含相等述詞的範例查詢:

SELECT *
FROM table_1
WHERE column_a > -1
AND column_b > -1

這個範例查詢只包含不相等述詞 (WHERE column_a > -1 AND column_b > -1)。假設 table_1 中的所有資料列均符合述詞 column_a > -1 和 column_b > -1 所限定的條件。在這種情況下,遺漏索引功能可能無法正確建議 column_acolumn_b 的索引。而動態管理檢視 sys.dm_db_missing_indexes_group_stats 所報告的相關聯影響數目可能也不正確。

僅傳回某些查詢的內含資料行

這項功能有時候只會報告內含資料行的資料行使用資訊。例如,此功能可能報告相等資料行 = { }、不相等資料行 = { },以及內含資料行 = {b, c, …}。在這種情況下,您必須選取索引鍵資料行的其中一個內含資料行。請使用從部份相同資料行獲益的其他查詢所傳回的遺漏索引資訊,來判斷您應該為索引鍵選取哪一個內含資料行。

僅傳回原始資訊

遺漏索引功能會傳回有關可能遺漏索引之資料行的原始資訊。這表示傳回的資訊可能需要進行額外的處理,您才能使用這些資訊來建立索引。

例如,如果涉及的資料行是一個計算資料行,而進行的是不具決定性或不精確的計算,則該資料行上的 CREATE INDEX 陳述式就會失敗。如果是不精確的計算,您應該先保存資料行,然後才能建立索引。

對 XML 執行程序表中的相同遺漏索引群組傳回不同的成本

遺漏索引群組可能會在 XML 執行程序表中重複出現,而每次遺漏索引群組出現時所報告的成本都不一樣。當單一查詢從相同遺漏索引群組獲益的情況不同時,就有可能發生這種狀況。

請考量下列範例查詢:

SELECT i.CustomerID, c.ModifiedDate, City
FROM NewIndividual i JOIN NewCustomer c ON i.CustomerID = c.CustomerID
                    AND c.CustomerType = 'I'
          JOIN NewCustomerAddress ca ON ca.CustomerID = c.CustomerID
          JOIN NewAddress a ON a.AddressID = ca.AddressID
WHERE i.CustomerID = 16701

在這項查詢中,CustomerID 資料行上兩個不同的聯結條件可能會產生兩個相同的遺漏索引群組,而且這兩個群組在 NewIndividual.CustomerID 資料行上也包含相同的索引。在這種情況下,sys.dm_db_missing_index_groups 動態管理檢視只會有遺漏索引群組的一個資料列。不過,遺漏索引群組會在 XML 執行程序表輸出中重複出現,而且不同的聯結條件會有不同的成本。