很有可能在于输入参数的选择性上面
假设对Name字段做了索引
where Name like 'ABC%' 和 where Name like '%ABC' 在语句中使用是完全不一样的,'ABC%'可以利用索引,存储过程编译的时候可能吧它编译成 '%ABC' 这样, 具体还是贴语句吧。

解决方案 »

  1.   

    清除缓存过程的计划试试{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}RECOMPILE 表明 SQL Server 不会缓存该过程的计划,该过程将在运行时重新编译。在使用非典型值或临时值而不希望覆盖缓存在内存中的执行计划时,请使用 RECOMPILE 选项。ENCRYPTION 表示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 语句文本的条目。使用 ENCRYPTION 可防止将过程作为 SQL Server 复制的一部分发布。
      

  2.   

    存储过程执行时 第一次执行生成一个执行计划 以后每次执行都按照第一个存储过程的执行计划来执行 如果前后执行的语句不一样
    那么就会很慢SQL 语句执行是每次都生成一个新的执行计划的 
    创建存储过程时 用 create proc p_name 变量 with recompile
    每次执行存储过程都生成一个新的执行计划