Почему при выполнении процедуры sp_executeSQL точно такой же SQL-запрос будет иметь другой план выполнения? - PullRequest
6 голосов
/ 30 марта 2011

Как гласит заголовок, я не понимаю, почему sp_executeSQL сгенерирует совершенно другой план выполнения, чем выполнение запроса из Sql Management Studio.

Мой запрос будет занимать 3 секунды при запуске из SQL Management Studio, где запрос, выполняемый в Management Studio через sp_executeSQL, займет 5 минут.

Я обновил статистику и просмотрел индексы, но в моей голове остался тот факт, что план выполнения из sp_executeSQL был НАМНОГО хуже, чем запуск SQL непосредственно из моей студии управления.

Итак, вот мой вопрос: почему планы выполнения так сильно различаются при выполнении запроса этими двумя различными способами?

Спасибо

Ответы [ 2 ]

5 голосов
/ 30 марта 2011

см. это

в основном, может быть несколько планов [выполнения] для одной и той же процедуры

2 голосов
/ 30 марта 2011

Учтите это. Когда вы выполняете хранимую процедуру, эта процедура будет иметь свой собственный план выполнения. Когда вы выполните оператор запроса, он снова будет иметь свой собственный план выполнения. Теперь при использовании sp_executeSQL вы запускаете эту хранимую процедуру для динамического выполнения запроса. Таким образом, по сути, его план выполнения представляет собой комбинацию sp_executeSQL и вашего запроса.

...