今天碰到一个问题,有个存储过程执行需要1分钟,但是把存储过程复制出来,将参数赋值,然后执行,只要6秒。后来终于发现是Parameter sniffing问题。
原存储过程:
IF ( OBJECT_ID('sp_yp_jxctj', 'P') IS NOT NULL ) DROP PROC sp_yp_jxctj; GO /*======================================================== 描述: 系统: 引用: 输入: 输出: 备注: 修改记录: ==========================================================*/ CREATE PROC sp_yp_jxctj @startDate VARCHAR(50) , --开始时间 @endDate VARCHAR(50) , --结束时间 @inputCode VARCHAR(24) , --输入码 @deptCode VARCHAR(20) , --科室代码 @drugType CHAR(2) , --药品类型 @drugAttr VARCHAR(20) , --药品属性 @dosage VARCHAR(20) , --剂型 @drugState INT , --药品状态 @rate INT --零差率 AS BEGIN ---------------------------- --内容省略 ---------------------------- end;