sp_executesql使我的动态查询运行得慢得多

时间:2013-03-18 13:44:58

标签: sql sql-server

我有两种方式的查询。一旦这样:

declare @var1 int
declare @var2 int


set @var1 = 1
set @var2 = 50

declare @myQuery = nvarchar(max)
set @myQuery = 'INSERT INTO someTable
                @var1
                WHERE something = @var2'

EXEC sp_executesql @myQuery,
    N'@var1 int,
    @var2 int',

我的查询也是:

declare @var1 int
declare @var2 int   
set @var1 = 1
set @var2 = 50

INSERT INTO someTable
@var1
WHERE something = @var2

我的真实查询更长更复杂。第一种方式大约需要4分钟,而第二种方式大约需要20秒。到底是怎么回事!?我一直在尝试研究类似的问题,我一直在看有关查询缓存的事情,但通常是因为人们不是第一种方式,他们只是在nvarchar上执行exec。

我对SQL很缺乏经验,完全迷失了。任何帮助都会很棒。

我第一种方式的原因是我从C#调用存储过程并将其传递给参数。

1 个答案:

答案 0 :(得分:0)

如果您正在使用SSMS,则可以选择显示查询的执行计划。看一看,看看每种情况有什么不同。

我对你做第一种方式的原因感到困惑...是你的存储过程的sp_executesql部分吗?或者您只是试图模仿来自SSMS的存储过程?