Pur*_*ish 2 sql-server stored-procedures
我记得读过一段时间后,随机SQL Server可以减速和/或花费很长时间执行存储过程,如下所示:
CREATE PROCEDURE spMyExampleProc
(
@myParameterINT
)
AS
BEGIN
SELECT something FROM myTable WHERE myColumn = @myParameter
END
Run Code Online (Sandbox Code Playgroud)
修复此错误的方法是执行此操作:
CREATE PROCEDURE spMyExampleProc
(
@myParameterINT
)
AS
BEGIN
DECLARE @newParameter INT
SET @newParameter = @myParameter
SELECT something FROM myTable WHERE myColumn = @newParameter
END
Run Code Online (Sandbox Code Playgroud)
现在我的问题首先是对我的所有存储过程都遵循第二个例子是不好的做法?这似乎是一个很容易通过很少的工作来防止的错误,但这样做会有任何缺点,如果是这样,为什么呢?
当我读到这个问题时,同样的proc将需要不同的时间来执行,具体取决于参数中的值,如果有人可以告诉我这个问题叫什么/为什么它会发生我真的很感激,我似乎无法在任何地方找到帖子的链接,这似乎是我们公司可能出现的问题.
您可以始终使用此屏蔽模式,但并不总是需要它.例如,通过唯一键进行简单选择,没有子表或其他过滤器,每次都应按预期运行.
从SQL Server 2008开始,您还可以使用OPTIMIZE FOR UNKNOWN(SO).另请参阅在where子句中使用局部变量的替代方法以及何时使用OPTIMIZE FOR UNKNOWN的经验
| 归档时间: |
|
| 查看次数: |
232 次 |
| 最近记录: |