問題一:存儲過程放在查詢分析器中執行,大概耗時5秒左右即可成功執行,但是在網站中執行卻會超時
1. 將該存儲過程放到查詢分析器中執行,大概耗時5秒左右即可成功執行,但是在網站中執行卻會超時;
2. 經查閱資料,這裏存儲過程的執行計劃是被緩存了,參數不同,還是按照老的執行計劃查詢,效率也會不同
3. 解決辦法:
在存儲過程的定義上,加上 WITH RECOMPILE ,這樣針對不同的類型查詢,可以強制重新編譯執行過程
這樣每次執行存儲過程的時候就會重新分析執行計劃,提高效率;
問題二:直接在查詢分析器中執行存儲過程很慢,但是把存儲過程中的內容拿出來執行很快
1. 原因:存儲過程的參數嗅探
2. 解決辦法:
把存儲過程的參數賦值給了存儲過程中自定義的變量,整個存儲過程中使用這個變量來代替參數,並且在參數賦值的地方加上OPTION (OPTIMIZE FOR UNKNOWN)
經過測試,存儲過程執行時間和sql單獨拿出執行時間一致;