簡介
選項(重新編譯) SQL Server 中的) 子句一直被認為是一項昂貴的操作,但它包含在某些查詢可以顯著提高效能。這個悖論讓許多開發者感到困惑,引發了對底層機制以及 OPTION (RECOMPILE) 在什麼情況下真正有利的疑問。
問題
一位開發者遇到的問題一種異常情況,向查詢添加OPTION (RECOMPILE) 會使其執行時間從五分鐘多縮短到半秒。無論查詢是從查詢分析器執行還是透過使用 SqlCommand.ExecuteReader() 的 C# 應用程式執行,此行為都會持續存在。查詢呼叫始終使用相同的參數,以消除對次優參數嗅探的任何擔憂。
解釋
與 OPTION (RECOMPILE) 始終為的假設相反這是一項昂貴的操作,但在特定情況下可能是有益的。常見的解釋是,當底層資料或參數發生顯著變化時,需要重建執行計劃。
當 SQL Server 建立預存程序(或任何參數化查詢)時,它會根據預存程序(或任何參數化查詢)快取最高效的執行計劃。初始數據和參數。但是,使用不同資料或參數的後續執行可能不再與快取的執行計劃保持一致。在這種情況下,使用 OPTION (RECOMPILE) 重新編譯執行計劃會強制 SQL Server 針對目前條件對其進行最佳化,這可能會帶來更好的效能。
在所呈現的特定情況下,開發人員應考慮重建查詢的執行使用 sp_updatestats 計劃和更新統計資料。此過程可確保快取的執行計劃基於最新信息,從而減少每次執行時重新編譯的需要。
關鍵要點
以上是OPTION (RECOMPILE) 何時會使 SQL 查詢速度出奇地快?的詳細內容。更多資訊請關注PHP中文網其他相關文章!