存储过程-c#-执行慢

现象1

使用 ADO.net调用存储过程,之前很快,这两天突然就慢了,程序未改动,存储过程有调整

现象2

在SQL SERVER 中执行存储过程很快

现象3

重新创建一个一摸一样的存储过程(名字不一样),然后使用单元测试分别测试调用

老的存储过程很慢

新的存储过程很快



可尝试下面的解决办法

exec sp_recompile @objname='存储过程名称'

正常情况下应该可以解决问题,如果不行,可尝试再调用几次

执行后可看到如下一句话:

已成功地标记对象 '存储过程名称',以便对它重新进行编译。



原因分析

由于存储过程是预编译的, 在第一次执行的时候, 会生成执行计划, 以后执行的时候, 会使用这个执行计划(除非存储过程侯或者显示指定重新编译), 而不是每次执行时都去生成执行计划。

当存储过程涉及的对象结构调整, 或者相关的数据产生了很大变化, 这可能导致原来的计划不适合当前的现状(执行计划过期), 这种情况下应该重新编译存储过程。