我們有一個包含超過 2000 萬條記錄和 50 多個列的表。我最近向它添加了一個新列,型別為bit。更改完成后,一些使用此表的存盤程序性能不佳。DBA 要求我運行 SP_Recompile 'tableName' 命令來更新表統計資訊。在我這樣做之后,程式運行良好。有人可以解釋一下更改表并添加新列時會發生什么嗎?它如何影響性能?
uj5u.com熱心網友回復:
這實際上在檔案中進行了解釋。
首先,sys.sp_recompile N'{Table Name}';不更新表的統計資訊。從檔案:
如果 object 是表或視圖的名稱,則所有參考該表或視圖的存盤程序、觸發器或用戶定義的函式將在下次運行時重新編譯。
重新編譯意味著下次重新生成查詢的查詢計劃;不使用舊的快取。檔案中還討論了為什么要這樣做:
存盤程序、觸發器和用戶定義函式使用的查詢僅在編譯時進行優化。由于對資料庫進行了索引或其他影響統計的更改,編譯的存盤程序、觸發器和用戶定義的函式可能會失去效率。通過重新編譯作用于表的存盤程序和觸發器,您可以重新優化查詢。
當您更改表時,您可能會影響統計資訊。但是,同樣,每天使用行和插入、更新和洗掉的地方也是如此。看來這里就是這種情況,程式使用的計劃現在并不是最有效的。強制他們重新編譯意味著他們可以使用新的統計資料和新的(希望更有效)計劃。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/327539.html
標籤:sql sql-server 查询语句 姐姐 msbi
上一篇:從GUI中的條目計算總數
下一篇:查找一個數字是否一直在增加/減少
