問題一:儲存過程放在查詢分析器中執行,大概耗時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...