2013-10-17 42 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

相关问题