Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/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 2005 执行过程中花费时间的存储过程_Sql Server 2005 - Fatal编程技术网

Sql server 2005 执行过程中花费时间的存储过程

Sql server 2005 执行过程中花费时间的存储过程,sql-server-2005,Sql Server 2005,很久以来,我在这个问题上一直在发疯。我在MS SQl中有存储过程,当我试图通过提供SQl查询中的所有参数来执行该过程时,执行该过程需要很长时间,但当我试图直接运行SP中的查询时,它会立即执行。这也影响了我的应用程序性能,因为我们正在使用存储过程从DB服务器获取数据 请帮忙 问候, 维克拉姆看起来像 这里有一个很好的解释: 基本上,sql server已经为它第一次运行时使用的参数缓存了查询执行计划,因此对于您传递的新值,该计划不是最优的。当您直接运行查询时,此时会生成计划,这就是为什么它很快 您

很久以来,我在这个问题上一直在发疯。我在MS SQl中有存储过程,当我试图通过提供SQl查询中的所有参数来执行该过程时,执行该过程需要很长时间,但当我试图直接运行SP中的查询时,它会立即执行。这也影响了我的应用程序性能,因为我们正在使用存储过程从DB服务器获取数据

请帮忙

问候,

维克拉姆看起来像

这里有一个很好的解释:

基本上,sql server已经为它第一次运行时使用的参数缓存了查询执行计划,因此对于您传递的新值,该计划不是最优的。当您直接运行查询时,此时会生成计划,这就是为什么它很快


您可以在定义中使用或与“重新编译”选项手动标记重新编译过程,以便在每次运行时对其进行编译。

听起来它“可能”是旧参数嗅探问题:+1。不过,在重新编译
之前,我会先看看
优化
或分配给局部变量。@Martin-是的,我同意你的看法。不幸的是,sql server 2005不支持针对未知对象进行优化。亲爱的Giorgi,我的一位同事提出了一个基于跟踪和运行的解决方案,效果很好。我们在SP的查询中对varchar参数执行了LTRIM和RTRIM,如下所示。选择CustomerID,CustomerName from Customer where LTRIM(RTRIM(CustomerName))=LTRIM(RTRIM(@CustomerName))我们不确定这是否是解决此问题的正确方法,以及它如何帮助解决此问题。请suggest@Vikram-我想这与将参数分配给局部变量具有相同的效果。但是,我不会使用您发布的解决方案,因为它将无法利用索引。我链接的文章展示了一个更好的选择。我尝试给局部变量分配参数,但这无助于我解决这个问题。任何其他帮助都将不胜感激。