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

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

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

2.       經查閱資料,這裏存儲過程的執行計劃是被緩存了,參數不同,還是按照老的執行計劃查詢,效率也會不同

3.       解決辦法:

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

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

 

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

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

2.      解決辦法:

把存儲過程的參數賦值給了存儲過程中自定義的變量,整個存儲過程中使用這個變量來代替參數,並且在參數賦值的地方加上OPTION (OPTIMIZE FOR UNKNOWN)

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