當您使用資料表變數,在 SQL Server 2012年或 SQL Server 2014年修正: 低效能

請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。

按一下這裡查看此文章的英文版本:2952444
徵狀
當您填入多個資料列的資料表變數,然後將其加入與其他資料表時,查詢最佳化器可能會選擇效率不佳的查詢計劃,可能會導致降低查詢效能。
解決方案
您套用此 hotfix 之後,您可以開啟追蹤旗標允許足夠的資料列的數目變更時,觸發重新編譯資料表變數的 2453年。這可能會讓查詢最佳化器選擇更有效率的計劃。

問題已先修正下列的累積更新或 / 以及 SQL Server 的服務套件。

SQL Server 2014年累積更新 3

關於 SQL Server 的累積更新

每個新的累積更新的 SQL Server 包含的所有 hotfix 與安全性修正,全都包含在先前的累積更新。取出 SQL Server 的最新的累積更新:

SQL Server 2012年的服務套件 2

有關 SQL Server 的服務套件

Service pack 是累計的。每個新的 service pack 包含了所有的修正程式,先前的 service pack,加上任何新的修正程式中。我們建議以套用最新的 service pack 和該服務套件最新的累積更新。您沒有安裝先前的 service pack,才能安裝最新的 service pack。使用下列文件中的 [表格 1],尋找最新 service pack 及最新的累積更新的相關資訊:

其他相關資訊
當您使用批次或程序中的資料表變數時,查詢編譯,並針對資料表變數的初始空白狀態進行最佳化。如果在執行階段的多個資料列擴展這個資料表變數,可能不會再最佳先行編譯的查詢計劃。例如,查詢可能會加入與巢狀迴圈資料表變數因為它是針對少數幾個資料列通常更有效率。這個查詢計劃可能會沒有效率,資料表變數有數百萬個資料列的。雜湊聯結可能是較佳的選擇,這種條件下。若要取得新的查詢計劃,它需要重新編譯。不同於其他的使用者或暫存資料表,不過,資料表變數中的資料列計數變更不會觸發查詢重新編譯。一般而言,您可以暫時略過這與選項 (重新編譯),其中有它自己的額外成本。
追蹤旗標 2453年可讓查詢重新編譯而不選項 (重新編譯) 的優點。此追蹤旗標和兩個主要方面不同從選項 (重新編譯)。
(1) 它與其他資料表中使用相同的資料列計數臨界值。查詢不需要針對每次執行與不同的是選項 (重新編譯) 來編譯。只有當資料列計數變更超過預先定義的臨界值時,它就會觸發重新編譯。
(2) 選項 (重新編譯) 會強制窺視參數,並將查詢最佳化的查詢。此追蹤旗標不會強制參數窺視。

附註此追蹤旗標必須在執行階段為 ON。無法使用此追蹤旗標設定為 QUERYTRACEON。必須小心使用此追蹤旗標,因為它可以增加可能需耗費的成本比省下更好的查詢最佳化的查詢重新編譯次數。
狀況說明
Microsoft 已確認這是<套用> 一節所列出的 Microsoft 產品的問題。

警告:本文為自動翻譯

內容

文章識別碼:2952444 - 最後檢閱時間:02/22/2016 07:13:00 - 修訂: 3.0

Microsoft SQL Server 2012 Service Pack 2, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard

  • kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB2952444 KbMtzh
意見反應