Sample Query:
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
I've a query which is similar to one above and when i use this in stored procedure it runs indefinitely without giving any output. But if i use same query as,
SELECT * FROM table1 t1
INNER JOIN table2 t2 on t1.id = tr.id
WHERE t2.desc LIKE 'A%' -- notice no parameter here
This executes in less than a second.
My table2 has 140K records and table1 some 250K
Any idea what could be causing like operator to run slow?
"parameterized queries typically execute much faster than a literal SQL string because they are parsed exactly once (rather than each time the SQL string is assigned to the CommandText property)."
The main advantage of a parameterized query is that the query does not need to be prepared each time it is run. A good example of this is scrolling a master record while the detail is refreshed based on the new record.
The benefit of parameterized SQL queries is that you can prepare them ahead of time and reuse them for similar applications without having to create distinct SQL queries for each case.
Short answer is, parameterized queries function the same way as stored procedures. SQL Server will be able to reuse execution plans because it will recognized the parameters as such. So from the performance point of view, there's no real difference.
It does not know at compile time that @param
will not have a leading wildcard so when it compiles the batch it gives you a plan with a scan not a seek.
You could maybe try OPTION (RECOMPILE)
or OPTION (FORCESEEK)
(SQL Server 2008) to see if it gives you a better plan.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With