如何解決使用存儲過程非常慢,但是執行SQL很快相關問題


前言

最近,在工作中發現,兩個問題:

1.應用程序調用存儲過程很慢,但是在查詢分析器中把SQL語句拿出來執行存儲過程就很快。

2.在查詢分析器中執行存儲過程很慢,但是把存儲過程中的內容拿出來執行很快

問題的分析與解決

問題1 產生原因

在應用程序中(或者在查詢分析器中)調用存儲過程的時候,存儲過程的執行計划是被緩存了,就算參數不同,還是按照老的執行計划查詢,效率也會不同。

問題1 解決方法

直接在存儲過程定義參數的最后,添加WITH RECOMPILE 就會被強行重新編譯執行存儲過程

如下圖代碼所示:


ALTER PROCEDURE PRO_NAME
(
   @PARA1 VARCHAR(100)
) WITH  RECOMPILE
   

問題2 產生原因

在執行存儲過程中出現了參數嗅探

問題2 解決方法

如果存儲過程調用的比較頻繁可使用OPTION (OPTIMIZE FOR UNKNOWN),如果不是,可使用OPTION (RECOMPILE)

因為業務需要,存儲過程需要頻繁使用,所以,使用了OPTION (OPTIMIZE FOR UNKNOWN) 處理。

具體使用代碼示例如下:

ALTER PROCEDURE PRO_NAME
(
   @PARA1 VARCHAR(100)
) WITH  RECOMPILE
AS
BEGIN
   SELECT * FROM TABLE_NAME WHERE FIELD_NAME=@PARA1 OPTION (OPTIMIZE FOR UNKNOWN)
END

以上,親測有效~

原文1
原文2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM