sql server - Prevent ADO.NET from using sp_executesql -
in our sql server 2005 database (tested using management studio dbcc freeproccache
, dbcc dropcleanbuffers
), following statement fast (~0.2s compile time, ~0.1s execution time):
select ... ... = 1 , b = '' ...
the following statement, however, slow (~0.2s compile time, 7-11s execution time):
exec sp_executesql n'select ... ... = @a , b = @b ...', n'@a int, @b nvarchar(4000), ...', @a=1, @b=n'', ...
sql server chooses different execution plan, although queries equal. makes sense, since, in first case, sql server has actual values of a
, b
, other parameters available , can use statistics create better plan. apparently, query plan concrete values of parameters much better generic 1 , outweighs "query plan caching" performance benefit.
now question: ado.net seems use second option (sp_executesql) when executing parameterized queries, usually makes sense (query plan caching, etc.). in our case, however, kills performance. so, there way either
- force ado.net use different
sp_executesql
(i.e., sql server query analyzer takes actual parameter values account) or - force sql server recaclulate query plan of sql passed
sp_executesql
taking parameter values account?
and please don't tell me have go ugly, old, dangerous sql = "where b = " + quoteandescape(parameterb)
...
putting sql stored procedure makes no difference (slow, , without with recompile
). did not post actual sql statment since quite complex (joins on multiple tables, including sub-selects , aggregation).
old thread know, found googling pretty exact same phrase! had same issue (query ran fast in management studio using parameters, slow via ado.net) , replicated issue running query in management studio via "exec sp_execute". 2 execution plans different, optimize query hint, instead did initial select of of data temporary table. seemed make difference, , given query complex one, might make difference in case - i'm not quite sure how worked, seemed kick execution plan line when using sp_execute.
Comments
Post a Comment