Вы можете стать жертвой проблемы "сниффинга параметров". MS-SQL примет параметры вашего первого прогона вашего SP как лучшую выборку для составления плана запроса. Ваш запрос может быть медленным из-за этого.
Чтобы доказать, попробуйте запустить содержимое вашего запроса напрямую, имитируя заполненные параметры как переменные. Если это намного быстрее, то у вас действительно есть проблема с "анализом параметров".
Решение состоит в том, чтобы обмануть MS-SQL, чтобы думать, что ваши параметры используются только для назначения другим переменным. Пример:
create proc ManyParams
(
@pcol1 int,
@pcol2 int,
@pcol3 int
)
as
declare
@col1 int,
@col2 int,
@col3 int
select
@col1 = @pcol1,
@col2 = @pcol2,
@col3 = @pcol3
select
col1,
col2,
col3
from
tbl
where
1 = case when @col1 is null then 1 else case when col1 = @col1 then 1 else 0 end end
and 1 = case when @col2 is null then 1 else case when col2 = @col2 then 1 else 0 end end
and 1 = case when @col3 is null then 1 else case when col3 = @col3 then 1 else 0 end end