sp_recompile (Transact-SQL)
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體
會在下次執行預存程式、觸發程式和用戶定義函式時重新編譯。 它會從程式快取卸除現有的計劃,以強制下次執行程式或觸發程式時建立新的計劃。 在 SQL Server Profiler 集合中,會記錄事件 SP:CacheInsert
,而不是事件 SP:Recompile
。
語法
sp_recompile [ @objname = ] N'object'
[ ; ]
引數
[ @objname = ] N'object'
目前資料庫中預存程式、觸發程式、數據表、檢視或使用者定義函數的限定或未限定名稱。 @objname為 nvarchar(776),沒有預設值。
如果 @objname 是預存程式、觸發程式或使用者定義函式的名稱,則下次執行預存程式、觸發程式或函式時,將會重新編譯該預存程式、觸發程式或函式。
如果 @objname 是數據表或檢視表的名稱,則下次執行數據表或檢視時,將會重新編譯所有參考數據表或檢視表的預存程式、觸發程式或使用者定義函式。
傳回碼值
0
(成功) 或非零數字 (失敗)。
備註
sp_recompile
只尋找目前資料庫中的物件。
預存程式或觸發程式所使用的查詢,以及使用者定義函式只有在編譯時才會優化。 當索引或其他影響統計數據的變更對資料庫進行時,編譯的預存程式、觸發程式和用戶定義函式可能會失去效率。 藉由重新編譯數據表上作用的預存程式和觸發程式,您可以重新優化查詢。
通常不需要主動執行此預存程式。 SQL Server 會在有利的情況下自動重新編譯預存程式、觸發程式和使用者定義函式。 資料庫引擎可能會選擇重新編譯物件的原因有很多種。 最常見的情況是,由於自動或手動統計數據更新,自動重新編譯會遵循基礎基數估計值的變更。
使用每次執行重新編譯預存程式,是對抗參數化所造成查詢計劃問題的較不有效率方式之一。 SQL Server 2022 (16.x) 中引進的功能 參數敏感性計劃優化 會嘗試自動減輕此問題。 在舊版中,不要使用每個執行呼叫 sp_recompile
,請考慮:
- 將 WITH RECOMPILE 選項 附加至查詢,需要變更程式碼。
- 使用
WITH RECOMPILE
計劃指南套用選項。 WITH RECOMPILE
使用 查詢存放區 提示套用選項,而不需變更程序代碼。- 如需詳細資訊,請參閱 解決具有參數敏感性計劃問題的查詢。
權限
需要指定物件的 ALTER 許可權。
範例
下列範例會在下次執行數據表時重新編譯預存程式、觸發程式和使用者定義函 Sales.Customer
式。
USE AdventureWorks2022;
GO
EXEC sp_recompile N'Sales.Customer';
GO