SQL Server sp_ExecuteSQL和执行计划

时间:2010-09-14 15:47:45

标签: sql sql-server sql-server-2005 tsql sql-execution-plan

我的查询在SQL Server Management STudio中是超高速的,在sp_ExecuteSQL下运行时超级慢。

这是否与在spExecuteSQL下运行时未执行的执行计划的缓存有关?

3 个答案:

答案 0 :(得分:8)

没有

您可以使用以下查询查看两个执行计划并进行比较。

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版本将有objtype“准备好”

答案 1 :(得分:1)

经历过相同的行为。 (设置选项相等) Regular Query生成并行计划并使用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'

我设法获得修改使用过的视图的最佳结果,因为它包含例如左连接用于始终预期的数据。 (转换为INNER联接)

现在常规查询选择与使用sp_executesql获得的计划相同的计划,性能更好。

答案 2 :(得分:0)

我通过更新统计信息解决了SSMS中临时TSQL和sp_executesql在查询计划方面的差异。这是一个简单的查询,两次触及同一张表。 更新统计表