Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 r2 带参数的动态SQL比存储过程快?_Sql Server 2008 R2 - Fatal编程技术网

Sql server 2008 r2 带参数的动态SQL比存储过程快?

Sql server 2008 r2 带参数的动态SQL比存储过程快?,sql-server-2008-r2,Sql Server 2008 R2,我发现,如果使用参数化命令在代码中创建相同的查询,那么比使用参数在存储过程中运行相同的查询要快 为什么会这样 例如,当我在没有存储过程的情况下运行查询时,需要2秒,而如果在带有参数的存储过程中运行查询,则需要4到5秒。不要假设。很可能查询计划是相同的,并且第二次调用(使用动态SQL)使用了缓存计划。也可能是您正在使用不同的参数运行这些程序,并且看到了参数嗅探的结果。推荐阅读:我的查询是相同的,因为我将同一组值传递给存储过程和ADO.Net中的参数化SQL语句。但是参数化的ADO.Net命令查询速

我发现,如果使用参数化命令在代码中创建相同的查询,那么比使用参数在存储过程中运行相同的查询要快

为什么会这样


例如,当我在没有存储过程的情况下运行查询时,需要2秒,而如果在带有参数的存储过程中运行查询,则需要4到5秒。

不要假设。很可能查询计划是相同的,并且第二次调用(使用动态SQL)使用了缓存计划。也可能是您正在使用不同的参数运行这些程序,并且看到了参数嗅探的结果。推荐阅读:我的查询是相同的,因为我将同一组值传递给存储过程和ADO.Net中的参数化SQL语句。但是参数化的ADO.Net命令查询速度更快。实际上,相同参数值的存储过程永远运行,这不是参数嗅探的意义所在。读那篇文章-真的。谢谢。我刚读过。所以所有参数都必须转换为存储过程中的局部变量才能删除参数嗅探?这很快。写这么长的文章有点太快了。不,事情不是这样的。