4

使用sql server 2008,我有一个简单的存储过程,其内容是

DELETE FROM [ABC].[dbo].[LookUpPermissions] 
WHERE Code = @Code

在最近的一次代码审查中,DBA 说我应该“添加参数嗅探”,我认为这意味着我应该考虑参数嗅探。我过去从未这样做过,并且查询没有任何性能问题,所以我认为这是不必要的。

虽然我认为答案可能是用户偏好,但考虑参数嗅探是否是最佳实践?如果在小数据集上调用存储过程,不经常使用并且没有性能问题,是否有必要?


编辑
这是否仅适用于WHERE子句中使用的参数,或者例如,您是否可能需要考虑INSERT语句中的所有参数?

4

2 回答 2

3

像这样简单地搜索单个值不应该容易受到参数嗅探的影响。当传入的参数导致结果大相径庭并且最佳执行计划与先前生成的计划不同时,更令人担忧。

例如,考虑一个查找日期列在@start_date 和@end_date 之间的行的查询。以 2 天的日期范围调用该过程可能会生成/缓存对于 1 年的日期范围不是最佳的执行计划。

于 2011-12-22T20:13:16.437 回答
-1

参数嗅探是 Microsoft 用来优化 SQL 查询的另一个内置“智能事物”(记住内联拼写/语法检查)。通过嗅探输入参数,SQL Server 可以最有根据地猜测哪个缓存查询计划是最佳使用计划。它并不总是做出正确的选择。

阅读本文以获取有关如何欺骗 SQL 使其不使用 pramater sniffing 的信息

于 2011-12-27T14:18:14.793 回答