儲存過程的重編譯處理

2021-05-24 07:50:08 字數 645 閱讀 2074

有3種方法可以重新編譯

1. 在床架儲存過程是使用with recompile子句

with recompile 子句可以指示sql server2005 不將該儲存過程的查詢計畫儲存在快取中,而是在每次執行時重新編譯和優化,並建立新的查詢計畫。

use book

gocreate procedure p_book1p

@出版社 varchar(20)

with recompile

as select * from book1 where 出版社= @出版社

這種方法並不常用,因為在每次執行儲存過程時都要重新編譯,在整體上降低了存儲存過程的執行速度,除非儲存過程本省市乙個比較複雜、耗時的操作。

2. 在執行儲存過程時設定重新編譯選項

通過在執行儲存過程時設定重新編譯,可以讓sql server2005 在執行儲存過程是重新編譯該儲存過程,在這一次執行後,心的查詢計畫又被儲存在快取中。

exec procedure_name with recompile

3. 通過系統儲存過程設定重新編譯選項

exec sp_recompile object

其中,object 當前資料庫中的儲存名稱,表活試圖名稱。

例: exec sp_recompile book

注意細節 儲存過程的重編譯

我們都知道,當儲存過程引用的表改變時,sql server 會重新編譯該儲存過程。但是當我們增加乙個有助於儲存過程執行效率的索引時,sql server 卻不會重新編譯該儲存過程。只有當儲存過程快取記憶體被沖刷時 sql server 重新啟動 儲存過程才會被重新編譯。如果想要強制編譯乙個儲存過程,...

oracle儲存過程不能編譯問題處理

1.登陸sys使用者,在pl sql選擇 tools sessions,會列出各個session的具體資訊 2.執行sql語句 select from v session t where t.action like test 找到當前進行儲存過程除錯的session,然後執行kill命令 alter...

在Oracle中重編譯所有無效的儲存過程

sql plus中,spool execcompproc.sql select alter procedure object name compile from all objects where status invalid and object type procedure spool off ...