Beispielabfrage:Warum läuft die parametrisierte Version dieser Abfrage langsamer als eine nicht parametrisierte Version?
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
Ich habe eine Abfrage, die auf eine ähnliche ist oben, und wenn ich diese Prozedur in gespeichert verwenden es läuft auf unbestimmte Zeit ohne jegliche Ausgabe zu geben. Aber wenn ich dieselbe Abfrage wie verwende,
SELECT * FROM table1 t1
INNER JOIN table2 t2 on t1.id = tr.id
WHERE t2.desc LIKE 'A%' -- notice no parameter here
Dies wird in weniger als einer Sekunde ausgeführt.
Mein table2 hat 140K Aufzeichnungen und tabelle1 einige 250K
Jede Idee, was wie Betreiber verursachen könnte langsam laufen?
Haben Sie sich einen Erklärungsplan für die Abfrage angesehen? –
Aufgrund Ihrer Tests klingt es nicht so, als hätte es überhaupt etwas mit dem gleichen Schlüsselwort zu tun, da sogar die schnelle Version diesen Operator enthält. – JohnFx
Ich habe versucht, beide laufen und es läuft weniger als eine Sekunde, wenn ich Parameter direkt verwende. –