Когда я выполняю хранимую процедуру с некоторыми входными данными, выполнение заняло более 30 секунд, но когда я непосредственно выполняю запрос с теми же входными данными, это заняло всего 3 секунды.
Я думаю, это из-за плохого плана выполнения, который остается в кэше, поэтому сначала я удалил эту хранимую процедуру и пересоздал ее, но это не сработало. Поэтому я добавил параметр WITH RECOMPILE
в хранимую процедуру и попытался, но это также не работает.
Затем я попытался назначить входные параметры локальным переменным, а затем использовал эти локальные переменные внутри хранимой процедуры (вместо фактических параметров), и после этого время выполнения хранимой процедуры сокращается до 3 секунд. (если это происходит из-за перехвата параметров, опция WITH RECOMPILE
также разрешит это правильно!).
И даже я восстановил ту же резервную копию на другом сервере, а затем выполнил ту же хранимую процедуру с теми же входами, что заняло всего 3 секунды.
Так может кто-нибудь прояснить логику c за ней?