使用存儲過程很是慢,可是執行SQL很快問題分析

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

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

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

3.       解決辦法:網站

在存儲過程的定義上,加上 WITH  RECOMPILE ,這樣針對不一樣的類型查詢,能夠強制從新編譯執行過程blog

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

 

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

  1. 緣由:存儲過程的參數嗅探效率

2.      解決辦法:變量

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

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