Из небольшого фрагмента запроса, который вы показали, трудно понять, есть ли у вас проблема с прослушиванием параметров, но похоже, что если вы неожиданно получите лучший план после освобождения кэша
Но это вообще плохой способ написания запросов в любом случае.(WHERE x=@x OR @X IS NULL
тип запроса), так как это приводит к ненужному сканированию.Это может не иметь никакого значения в этом случае, в зависимости от того, имеет ли ваш LIKE символ подстановки или нет.
Но SQL Server может в любом случае преобразовать LIKE
в поиск диапазона по индексу, поэтому вы будете без необходимости штрафовать запросы без начального подстановочного знака.(например, сравните планы для запросов ниже)
DECLARE @T nchar(3)
SET @T='%f'
SELECT [name]
FROM [master].[dbo].[spt_values]
where type like @T
SELECT [name]
FROM [master].[dbo].[spt_values]
where type like @T OR @T IS NULL
Вы можете попробовать разделить эти случаи или создать условия динамического поиска с помощью динамического SQL.