【发布时间】:2023-04-05 13:28:02
【问题描述】:
我在网上看到,如果您在存储过程中使用局部变量而不是输入变量,那么存储过程会被优化,就好像它使用提示 OPTIMIZE FOR UNKNOWN 一样。这到底是怎么发生的?另外,一般来说有什么好的做法:直接使用输入变量或创建局部变量并将输入变量分配给它们?
【问题讨论】:
-
您能否将minimal reproducible example 包含在实际输出(查询计划)和您认为应该是什么(预期输出)中?你可以使用Paste the Plan。
-
在 Internet 上搜索“参数嗅探”以了解为什么变量的行为类似于
OPTIMIZE FOR UNKNOWN(除非您使用OPTION(RECOMPILE)查询提示。就像几乎所有 SQL Server 一样,良好实践的答案是“这取决于”。 -
非常感谢你们!感谢您的回复。我去看看你们提到的那些文章。
-
知道“输入变量”被正确地称为参数可能会有所帮助 - 这将使搜索文章变得更加容易。
标签: sql-server t-sql stored-procedures