解決存儲過程執行快,但程序調用則執行慢的問題

這兩天在項目中遇到一個很鬱悶的問題,就是同一個存儲過程在數據庫中運行速度很快,可是在C#代碼中卻很慢,後來百度了下找到了答案,並解決了問題,如今記錄下,方便之後學習使用mysql

在百度上查詢這方面的資料。
在CSDN論壇上終於找到相似的資料貼子。其中有一網友在回覆中說「有多是執行計劃過時吧」,
真是一言驚醒夢中的我。

當即在查詢分析器上執行:sql


exec sp_recompile @objname='存儲過程名稱'


再次測試程序,此次終於成功了。速度很滿意。

緣由分析:
因爲存儲過程是預編譯的, 在第一次執行的時候, 會生成執行計劃, 之後執行的時候, 會使用這個執行計劃(除非存儲過程侯或者顯示指定從新編譯), 而不是每次執行時都去生成執行計劃。
當存儲過程涉及的對象結構調整, 或者相關的數據產生了很大變化, 這可能致使原來的計劃不適合當前的現狀(執行計劃過時), 這種狀況下應該從新編譯存儲過程。數據庫

若是修改一次不行,能夠再修改一次,再等會測試學習