SQL存储过程执行时间差

时间:2013-09-09 16:16:53

标签: sql-server vb.net sql-server-2008

我在win-form应用程序中遇到奇怪的问题,我在调用存储过程时需要大约6秒钟才能执行。 (此存储过程接受多个参数,包括一个输出参数)

从我使用的应用程序级别:

Dim dt1 = DateTime.Now
cmd.ExecuteNonQuery()
MessageBox.Show(DateTime.Now.Subtract(dt1).Seconds)

这大概是5-6秒

我尝试在sql-server上使用相同的参数运行相同的存储过程,并且没有时间执行:

declare @val decimal
exec mysp 'value1','value2','value3','value4',@val out 
select @val

我不确定问题是什么或从哪里开始。

2 个答案:

答案 0 :(得分:1)

直接调用SP和从.NET代码调用SP的问题可能是由于参数嗅探。 SQL Server可能会缓存执行计划,该计划对于您从代码传递的参数不是最佳的。

为避免这种情况,请尝试将WITH RECOMPILE添加到SP定义中,例如

CREATE PROCEDURE MySP (
    ... parameters...
) WITH RECOMPILE

AS

BEGIN
   ...

答案 1 :(得分:0)

如果您的存储过程需要使用nvarchar并使用varchar,则可能会出现问题。 SQL服务器将接受参数但将被强制执行转换。你有更多具体细节吗?