我有一个查询,在SQL Server管理工具中运行非常快,但在使用sp_ExecuteSQL运行时非常慢。
这是与执行计划缓存没有在使用sp_ExecuteSQL运行时发生有关吗?
我有一个查询,在SQL Server管理工具中运行非常快,但在使用sp_ExecuteSQL运行时非常慢。
这是与执行计划缓存没有在使用sp_ExecuteSQL运行时发生有关吗?
不可以。
您可以使用以下查询来查看两个执行计划并进行比较。
SELECT usecounts, cacheobjtype, objtype, text, query_plan, value as set_options
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle)
cross APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa
where text like '%Some unique string in your query%'
and attribute='set_options'
sp_executesql
版本将具有 "prepared" 的 objtype
我通过更新统计数据解决了在SSMS中使用即席TSQL和sp_executesql之间的查询计划差异。这是一个简单的查询,涉及两次访问相同的表格。 UPDATE STATISTICS sometable
我也经历过同样的情况(设置选项相等):正常查询会生成并行计划,而使用sp_executesql则会生成串行计划。
declare @xyzParam1 datetime,@xyzParam2 datetime
select @xyzParam1='Sep 1 2014 12:00:00:000AM',@xyzParam2='Sep 26 2014 11:59:59:000PM'
SELECT * FROM Theview WHERE departuretime BETWEEN @xyzParam1 AND @xyzParam2
;
vs
exec sp_executesql N'SELECT * FROM Theview WHERE departuretime BETWEEN @xyzParam1 AND @xyzParam2',N'@xyzParam1 datetime,@xyzParam2 datetime',@xyzParam1='Sep 1 2014 12:00:00:000AM',@xyzParam2='Sep 26 2014 11:59:59:000PM'