传说中的参数嗅探,parameter sniff,
博客园上有非常多这方面的资料
这个问题往简单了说就是,存储过程采用了不正确的方式去处理查询

解决方案 »

  1.   

    最简单最直接的方式就是不缓存存储过程的执行计划,直接提示with recompilealter proc test_proc 
    (@parameter ………………)
    with recompile
    as
    ………………
      

  2.   


    请问你是说在存储过程后加with recompile吗?
      

  3.   


    请问你是说在存储过程后加with recompile吗?是的
      

  4.   

    参数嗅探的原因比较大。但是要考虑编码规范,不是随便用with recompile就可以解决问题
      

  5.   

    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. 保持自动更新统计信息的选项为开启状态。有些不是直接和参数嗅探挂钩,但是算是比较好的编程规范