症狀
當你在 Microsoft SQL Server 2014 或 2016 中查詢一個檢視時,如果與 SQL Server 2008 R2 的執行相比,查詢時間可能會長得多。
當你執行使用 UNION ALL 及列目標 ((如 TOP N 子句、FAST N 或 EXIST 謂詞) )的查詢時,若與 2008 SQL Server R2 比較,可能會發現 2014 SQL Server 或更新版本的查詢運行較慢。
原因
在 SQL Server 2008 R2 中,查詢優化器會在 UNION ALL 下改變不同部分的順序,若存在列目標,則最便宜的部分先行。 這讓查詢能在較便宜的部分產生所需列數時更早完成執行,而不必繼續執行較昂貴的部分。 這種重新排序在後續版本的 SQL Server 中不再發生。
解決方式
此問題已在以下 SQL Server 累積更新中修正:
Cumulative Update 7 for SQL Server 2016 RTM
Cumulative Update 4 for SQL Server 2016 SP1
Cumulative Update 6 for SQL Server 2014 SP2
註 此問題必須啟用查詢優化器。
欲了解更多查詢優化器與追蹤標誌的資訊,請參考以下連結:
SQL Server 查詢優化器熱修正 TF 4199 服務模型
關於 SQL Server 的累積更新:
每次新的 SQL Server 累積更新都包含了之前累積更新中包含的所有熱修補與安全修補。 請查看 SQL Server 的最新累積更新:
狀態
Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。
參考資料
了解 Microsoft 用來說明軟體更新的術語。