最简单最直接的方式就是不缓存存储过程的执行计划,直接提示with recompilealter proc test_proc (@parameter ………………) with recompile as ………………
请问你是说在存储过程后加with recompile吗?
请问你是说在存储过程后加with recompile吗?是的
参数嗅探的原因比较大。但是要考虑编码规范,不是随便用with recompile就可以解决问题
1、你的问题不一定就是参数嗅探。 2、假设真的是嗅探,有一些小建议: a. OPTION (OPTIMIZE FOR UNKNOWN);--2008及以上版本 b. with recompile c. 尽量保证数据分布的平均性,不要某些数据只有1、2条,另外一些有几万条。 d. 计划向导 e. 避免在一个sp里面混合使用DDL和DML语句 f. 避免在sp里面使用set命令 g. 保持数据库对象的架构稳定。 h. 使用参数化查询,最好的参数化地点是前端应用语言,而不是SQL Server i. 保持自动更新统计信息的选项为开启状态。有些不是直接和参数嗅探挂钩,但是算是比较好的编程规范
(@parameter ………………)
with recompile
as
………………
请问你是说在存储过程后加with recompile吗?
请问你是说在存储过程后加with recompile吗?是的
2、假设真的是嗅探,有一些小建议:
a. OPTION (OPTIMIZE FOR UNKNOWN);--2008及以上版本
b. with recompile
c. 尽量保证数据分布的平均性,不要某些数据只有1、2条,另外一些有几万条。
d. 计划向导
e. 避免在一个sp里面混合使用DDL和DML语句
f. 避免在sp里面使用set命令
g. 保持数据库对象的架构稳定。
h. 使用参数化查询,最好的参数化地点是前端应用语言,而不是SQL Server
i. 保持自动更新统计信息的选项为开启状态。有些不是直接和参数嗅探挂钩,但是算是比较好的编程规范