使用sql server 2008,我有一个简单的存储过程,其内容是
DELETE FROM [ABC].[dbo].[LookUpPermissions]
WHERE Code = @Code
在最近的一次代码审查中,DBA说我应该“添加参数嗅探”,我相信这意味着我应该考虑参数嗅探。我以前从未这样做过,我的查询没有任何性能问题所以我认为这是不必要的。
虽然我认为答案可能是用户偏好,但最佳做法是考虑参数嗅探吗?是否有必要在小型数据集上调用存储过程,不经常使用并且没有性能问题?
修改
这仅适用于 WHERE 子句中使用的参数,或者例如,您是否需要考虑 INSERT 语句中的所有参数?
答案 0 :(得分:3)
对这样的单个值进行简单搜索不应该容易受到参数嗅探的影响。当传入的参数产生截然不同的结果并且最佳执行计划与先前生成的参数不同时,这更令人担忧。
例如,考虑一个查询日期列位于@start_date和@end_date之间的行的查询。调用日期范围为2天的程序可能会产生/缓存执行计划,该计划对于1年的日期范围而言并非最佳。
答案 1 :(得分:-1)
参数嗅探是另一个内置的“聪明的东西”(记住内联拼写/语法检查),Microsoft用它来优化SQL查询。通过嗅探输入参数,SQL Server使得最好的教育猜测哪个缓存查询计划将是最好的计划。它并不总能做出正确的选择。
Read this for information on how to trick SQL into not using pramater sniffing