我正在使用SQL Server 2012.最近我的所有存储过程都存在性能问题,但程序中的代码工作速度非常快。
我发现了一些关于参数嗅探的东西,所以我使用定义局部变量技术作为我所有程序的解决方法。
我问自己,为什么我的所有程序都会发生这种情况。我的唯一猜测是,因为我的所有程序都使用单个OPTIONAL参数。
这是我所有程序的标题
CREATE PROC [dbo].[MySampleProc] (@Key Int = NULL)
AS
....
我是对的吗?或者你还有其他想法吗?
答案 0 :(得分:0)
也许这不是参数嗅探,而是过时的统计数据。使用局部变量(或OPTIMIZE FOR UNKNOWN查询提示),行计数估计基于平均密度。但是,在指定参数时会使用实际的统计直方图值,因此当统计数据陈旧时,行计数估计值将关闭。
尝试使用FULLSCAN
更新统计信息。