sql - Execution Plan reuse -
consider following "code"
define stmt1 = 'insert t(a, b) values(1, 1); define stmt2 = 'select * t'; mssqlcommand.execute( stmt1;stmt2 ); mssqlcommand.execute( stmt2 );
investigating cached query-plans using:
select [cp].[refcounts] , [cp].[usecounts] , [cp].[objtype] , [st].[dbid] , [st].[objectid] , [st].[text] , [qp].[query_plan] sys.dm_exec_cached_plans cp cross apply sys.dm_exec_sql_text ( cp.plan_handle ) st cross apply sys.dm_exec_query_plan ( cp.plan_handle ) qp ;
my impression first "execute" generates composite execution plan instead of 2 singular execution plans, thereby disabling second "execute" reusing execution plan generated in first execute.
am right?
yes, you're right. reuse the second part of execution plan need split first statement 2 separate execution plans. can either executing them separate mssqlcommand.execute
calls or using 2 calls sp_executesql
in 1 query (this adds 1 level of indirection). (in pseudocode):
mssqlcommand.execute('exec sp_executesql stmt1; exec sp_executesql stmt2");
Comments
Post a Comment