刪除儲存過程非常慢,但是執行SQL很快問題分析

2021-10-10 06:51:34 字數 1535 閱讀 1777

問題一:儲存過程放在查詢分析器中執行,大概耗時5秒左右即可成功執行,但是在**中執行卻會超時

1.    將該儲存過程放到查詢分析器中執行,大概耗時5秒左右即可成功執行,但是在**中執行卻會超時;

2.       經查閱資料,這裡儲存過程的執行計畫是被快取了,引數不同,還是按照老的執行計畫查詢,效率也會不同

3.       解決辦法:

在儲存過程的定義上,加上 with  recompile ,這樣針對不同的型別查詢,可以強制重新編譯執行過程

這樣每次執行儲存過程的時候就會重新分析執行計畫,提高效率;

問題二:直接在查詢分析器中執行儲存過程很慢,但是把儲存過程中的內容拿出來執行很快

1. 原因:儲存過程的引數嗅探

2.      解決辦法:

把儲存過程的引數賦值給了儲存過程中自定義的變數,整個儲存過程中使用這個變數來代替引數,並且在引數賦值的地方加上option (optimize for unknown)

經過測試,儲存過程執行時間和sql單獨拿出執行時間一致;

問題一:儲存過程放在查詢分析器中執行,大概耗時5秒左右即可成功執行,但是在**中執行卻會超時

1.    將該儲存過程放到查詢分析器中執行,大概耗時5秒左右即可成功執行,但是在**中執行卻會超時;

2.       經查閱資料,這裡儲存過程的執行計畫是被快取了,引數不同,還是按照老的執行計畫查詢,效率也會不同

3.       解決辦法:

在儲存過程的定義上,加上 with  recompile ,這樣針對不同的型別查詢,可以強制重新編譯執行過程

這樣每次執行儲存過程的時候就會重新分析執行計畫,提高效率;

問題二:直接在查詢分析器中執行儲存過程很慢,但是把儲存過程中的內容拿出來執行很快

1. 原因:儲存過程的引數嗅探

2.      解決辦法:

把儲存過程的引數賦值給了儲存過程中自定義的變數,整個儲存過程中使用這個變數來代替引數,並且在引數賦值的地方加上option (optimize for unknown)

經過測試,儲存過程執行時間和sql單獨拿出執行時間一致;

mysql儲存過程建立 刪除 執行

mysql儲存過程 建立儲存過程 建立例子一 delimiter create procedure query user currcid int begin declare currkeywordid int declare currtitle varchar 255 declare currkey...

sql儲存過程比sql語句執行慢很多

引數嗅探的問題 原因 1 可能是發生了引數嗅探,第一次賦給儲存過程的輸入引數,會為該儲存過程生成乙個基於輸入引數的執行計畫,因此如果第一次輸入的引數不具有代表性 例如大部分查詢輸入的引數都是a值,但第一次執行儲存過程時輸入的是b值 就有可能比即席查詢慢,儘管即席查詢需要重新編譯執行計畫,但選擇了更有...

執行儲存過程比即時SQL執行慢的解決方案

發生過這樣一件事,寫了乙個sql,查詢資料大概5秒,但是放到儲存過程裡面去了過後,查了5分鐘也沒給出結果,後來網上找解決方案,終於找到乙個解決方案。在儲存過程的引數那裡對引數進行乙個傳遞。反正他們說的引數嗅探是這個意思。這是儲存過程的機制。具體是什麼,大家去網上搜尋下。alter procedure...