2013-10-17 44 views
2

我有一個非常大的存儲過程,它採用單個參數@date。當我突出顯示SQL代碼並執行時,查詢在大約25秒內運行。但是,如果我嘗試在一個單獨的窗口中運行存儲過程使用:Exec <存儲過程>極慢

Exec <Stored Procedure> @date = '2013-10-16' 

存儲過程大約需要一個小時半的運行。任何想法爲什麼這可能會發生?我也試圖通過BIDS來運行它,而存儲過程只需要運行一段時間。

注:當我強調要執行的代碼,我用

Declare @date as date = '2013-10-16' 

設置參數。

+0

我會檢查正在將proc中使用的源表,看看它們1.有多大和2索引和索引的碎片。 – GPH

+0

嘗試清除你的sql執行計劃。 http://stackoverflow.com/questions/1288808/sql-server-2005-how-do-you-clear-out-a-query-execution-plan –

+0

高亮顯示的代碼與存儲過程的創建/修改聲明,將創建/保存存儲過程。 在第二個窗口中,你實際上是在執行過程帶來的結果,如果考慮到太多的時間,也許有一個索引問題,或數據量過多過程中,使用的執行計劃,檢查那裏是被更慢 –

回答

3

當你說它運行快,如果你聲明的參數變量和手動運行SQL,但是當你通過BIDS我覺得參數嗅探運行它需要年齡。

嘗試在你的SP聲明一個變量,那麼你要做的第一件事是你參數的值賦給這個新的局部變量,那麼在任何地方使用的局部變量在你的SP。

欲瞭解更多信息:http://blogs.technet.com/b/mdegre/archive/2012/03/19/what-is-parameter-sniffing.aspx

+0

哇,我永遠不會想到這個,這工作!非常感謝。 – Caveman42

相關問題