症狀
Microsoft SQL Server 中的部分查詢執行計畫包含在資料表或索引掃描/範圍作業之上評估篩選的模式。 篩選述詞的某些部分可能符合索引鍵,因此可用於執行索引搜尋或範圍掃描。 述詞的其餘部分稱為「殘差」,必須透過掃描或範圍運算來評估每一列輸出。 這會對應至篩選運算子。 不過,為了改善效能,SQL Server 可以將這類篩選向下推送到資料表存取運算子本身。
雖然此方法可改善整體效能,但在某些情況下 (例如,在與參數敏感度) 相關的不准確基數估計的情況下,掃描下方篩選處理的資料列數目可能比預期的要多。 當您使用實際執行計劃時,在查詢效能疑難排解期間可能會隱藏此事實,因為傳回的實際列數會對應至套用殘差述詞之後的列數,而不是從資料表或索引掃描的實際列數。
解決方式
為了改善「徵狀」一節所述案例的診斷,SQL Server 2012 Service Pack 3 (SP3) 和 SQL Server 2014 SP2 引進新的 showplan XML 屬性,即「實際讀取的資料列」。 此屬性提供運算子在套用殘差述詞之前讀取了多少列的相關資訊。
此功能已首次在下列 SQL Server Service Pack 中引進。
如需有關 SQL Server 2012 Service Pack 3 (SP3) 的詳細資訊,請參閱 SQL Server 2012 Service Pack 3 中修正的錯誤。
適用於 SQL Server 2014 的 SQL Server Service Pack 2
SQL Server 2016 Service Pack 1 (SP1)
關於 SQL Server Service Pack
Service Pack 是累積性的。 每個新版 Service Pack 都包含前一版 Service Pack 中所有的修正程式,以及任何新增的修正程式。 我們的建議是套用最新的 Service Pack 和該 Service Pack 的最新累積更新。 所以在安裝最新版的 Service Pack 之前,您不需要安裝前一版的 Service Pack。 使用下列文章中的「表 1」,尋找有關最新 Service Pack 和最新累積更新的詳細資訊。