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_Tsql_Stored Procedures - Fatal编程技术网

Sql server 2005 为什么调用存储过程比在存储过程中运行代码慢?

Sql server 2005 为什么调用存储过程比在存储过程中运行代码慢?,sql-server-2005,tsql,stored-procedures,Sql Server 2005,Tsql,Stored Procedures,我有一个需要一分钟才能运行的存储过程。如果我把代码放在存储过程中直接运行,大约需要20秒。我想不出有什么会导致 如果我查看执行计划,它们是不同的,但是在查询本身上获得执行计划会增加与存储过程调用的时间。p> 我试着用那个查询创建一个新的存储过程,但它和旧的一样慢 自存储过程创建以来,数据是否可能发生了很大的变化/增长?回想一下,存储过程的一个要点是缓存执行计划,以便下次运行时不必这样做。如果数据随时间急剧变化,存储过程可能无法正常执行 要强制SQL为存储过程构建新的执行计划并了解更多信息,go自

我有一个需要一分钟才能运行的存储过程。如果我把代码放在存储过程中直接运行,大约需要20秒。我想不出有什么会导致

如果我查看执行计划,它们是不同的,但是在查询本身上获得执行计划会增加与存储过程调用的时间。p>


我试着用那个查询创建一个新的存储过程,但它和旧的一样慢

自存储过程创建以来,数据是否可能发生了很大的变化/增长?回想一下,存储过程的一个要点是缓存执行计划,以便下次运行时不必这样做。如果数据随时间急剧变化,存储过程可能无法正常执行


要强制SQL为存储过程构建新的执行计划并了解更多信息,go

自存储过程创建以来,数据是否可能发生了很大的变化/增长?回想一下,存储过程的一个要点是缓存执行计划,以便下次运行时不必这样做。如果数据随时间急剧变化,存储过程可能无法正常执行


要强制SQL为存储过程构建新的执行计划并了解更多信息,go

听起来像是在运行存储过程时启用了“包含实际执行计划”。如果是这样,请在关闭该选项的情况下进行尝试。

听起来好像在运行存储过程时打开了“包含实际执行计划”。如果是这样的话,试着关闭这个选项。

我完全是从格兰特·弗里奇那里偷来的,但至少我给了他适当的信任:

参数嗅探通常是这样的原因。当您仅作为查询运行查询时,所有参数都是本地的,因此SQL Server可以查看、嗅探它们,并根据这些值确定执行计划。一旦将参数放入存储过程中,SQL Server就会正确地假定参数中存在未知值,并创建不同的执行计划。在大多数情况下,这很有效。在某些情况下,情况并非如此


我完全是从格兰特·弗里奇那里偷来的,但至少我给了他适当的信任:

参数嗅探通常是这样的原因。当您仅作为查询运行查询时,所有参数都是本地的,因此SQL Server可以查看、嗅探它们,并根据这些值确定执行计划。一旦将参数放入存储过程中,SQL Server就会正确地假定参数中存在未知值,并创建不同的执行计划。在大多数情况下,这很有效。在某些情况下,情况并非如此


不,我只是在实际查看执行计划时才打开它。不,我只是在实际查看执行计划时才打开它。我尝试创建一个新的存储过程只是为了测试它,没有区别。新的狂欢和旧的一样慢…:(我尝试创建一个新的存储过程只是为了测试这一点,没有什么区别。新的存储过程和旧的一样慢……:(我能做些什么吗?请看Gail Shaw的短文:顺便说一下,我在另一个科技问答网站上问了同样的问题,所以我对它很熟悉(这就是上面引用的地方).一个基本的答案是使用局部变量。我能做些什么吗?请看Gail Shaw的短文:顺便说一下,我在另一个科技问答网站上问了同样的问题,所以我对它很熟悉(这就是上面引用的地方)一个基本的答案是使用局部变量。发布代码。没有它,我们只能猜测。发布代码。没有它,我们只能猜测。