不好意思打擾了><
有user反應明明在同一台主機執行同一個stored procedure,
但是在相容性2008和2016上的時間差了好幾倍(2008只要21秒,2016要25分鐘)
我在網路上查到強致把2016的執行計劃指定成2008的
也有更新統計資料和重建索引值了
但是在2016跑同個sp還是一樣慢 一點進步也沒有
以下是我指定執行計劃的圖片:
想請問有大神知道為什麼會這樣嗎?
謝謝!
差這麼多,應該是2016上的資料表 Index 未設定。或者是新舊環境不一致的問題,例如記憶體大小或硬碟(SSD or 一般硬碟)。
2014 以後(含),估值引擎變了
2014 的估計資料列方式會預設你欄位之間有相關性 他算法不一樣
所以你雖然同一支SP,但會的到兩版完全不同的執行計畫
如果真的不想去調執行計畫,你要做的不是去強制執行計畫
你要去把相容性層級改成 110 但同時也會限制一些其他的新功能
或是開這個 LEGACY_CARDINALITY_ESTIMATION
或是用 QUERY HINT 去讓他使用以前的引擎
或是用 TF 9481 ( 不清楚什麼是 Trace Flag 的話就不要用這個 )
上面這四種作法目的都是讓你的查詢去用舊版的估計資料列引擎
還有因為不清楚是怎麼升級的
但建議升級過後都進行一下統計資訊的更新。