Почему делает параметризованную версию этого запроса, выполненного медленнее, чем непараметризованная версия?

Демонстрационный запрос:

CREATE PROCEDURE dbo.Test (@p varchar(10))
AS
DECLARE @param varchar(10)
SET @param = @p + '%'

SELECT * FROM table1 t1
INNER JOIN table2 t2 on t1.id = tr.id
WHERE t2.desc LIKE @param

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

SELECT * FROM table1 t1
INNER JOIN table2 t2 on t1.id = tr.id
WHERE t2.desc LIKE 'A%'  -- notice no parameter here

Это выполняется в меньше, чем секунда.

Мой table2 имеет записи 140K и table1 некоторый 250K

Какая-либо идея, что могло вызывать как оператор для отставания?

6
задан JohnFx 19 October 2010 в 16:33
поделиться