В SQL Server есть то, что называется «сниффинг параметров». По сути, в первый раз, когда вы запускали sp в плане выполнения в созданной базе на основе значений, которые вы передали SP. Вы запускаете его снова с теми же значениями - это быстро, вы запускаете его с другими значениями, оно может стать очень медленным, если эти значения являются «плохими» для первоначально сгенерированного плана выполнения.
Чтобы избежать перехвата параметров, вы можете объявить одну локальную переменную на параметр в вашей хранимой процедуре и назначить параметры локальным переменным. Тогда в коде хранимой процедуры используйте только переменные, а не параметры. Таким образом, план выполнения не будет основан на значениях, которые вы использовали при первом запуске.
Вы также можете найти много хороших статей по этой теме, если вы включите в Google 'сниффинг параметров sql'.