SQL Server sp_ExecuteSQL и планы выполнения - PullRequest
6 голосов
/ 14 сентября 2010

У меня есть запрос, который является сверхбыстрым в SQL Server Management STudio и очень медленным при запуске в sp_ExecuteSQL.

Это связано с тем, что кэширование планов выполнения не выполняется при запуске в spExecuteSQL?

Ответы [ 3 ]

8 голосов
/ 14 сентября 2010

Нет.

Вы можете просмотреть оба плана выполнения и сравнить их, используя следующий запрос.

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 голос
/ 29 сентября 2014

испытал такое же поведение.(установите параметры равными) Обычный запрос, создающий параллельный план и использующий 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 join)

Теперь обычный запрос выбирает тот же план, что и план, полученный с помощью sp_executesql, и производительность намного выше.

0 голосов
/ 06 мая 2019

Я исправил разницу в плане запросов между специальным TSQL в SSMS и sp_executesql, обновив статистику.Это был простой запрос, который дважды затрагивал одну и ту же таблицу.ОБНОВЛЕНИЕ СТАТИСТИКИ sometable

...