摘要:[SQL SERVER] 什么是参数探测 (Parameter Sniffing)
一般来说Stored procedure在第一次执行时,会把compile好的plan丢到plan cache里面
下一次执行时,会从cache里面取出,再次使用,让数据库减少compile的动作
这时候就会出现参数探测(parameter sniffing)这种潜在问题
因为可能因为参数的差异导致结果集差异过大,而非最佳化的效率
例如:
某一stored procedure可能是查询订单细目资讯,而参数为日期
平时只会执行当日一天的结果,但是如果查询为数年的结果
可能因为使用了一日结果的plan,导致效率很差
解决方式
- OPTION (RECOMPILE)
- OPTION (OPTIMIZE FOR (@VARIABLE=VALUE))
- OPTION (OPTIMIZE FOR (@VARIABLE UNKNOWN))
- Use local variables
写到一半..............晚点补充
原文:大专栏 [SQL SERVER] 什么是参数探测 (Parameter Sniffing) ,参数嗅探