sql как запрос медленный, если используется параметр объявлять, но быстрый, если нет - PullRequest
4 голосов
/ 13 мая 2011

SQL 2008: Это медленно (занимает 1 1/2 минуты):

declare @p1 varchar(50)
set @p1 = '976j%'
select * from invsearch_query where comparepnfwd like @p1

Это занимает меньше секунды:

select * from invsearch_query where comparepnfwd like '976j%'

Почему ???

1 Ответ

9 голосов
/ 13 мая 2011

Я полагаю, что у вас должен быть индекс без покрытия с начальным столбцом comparepnfwd, который используется литеральным запросом, но не запросом с переменной.

Вы можете использовать OPTION (RECOMPILE), чтобы заставить SQL Server перекомпилировать план с учетом фактического значения переменной.

...