#sql-server
#sql-сервер
Вопрос:
Вопрос для начинающих
но я считаю, что все еще существует большая путаница, поскольку это поведение изменилось между версиями SQL Server между SQL 2000 и SQL 2005 / более поздними версиями.
SQL Server 2000, имеющий временную таблицу в определении хранимых процедур, заставляет его перекомпилировать ее каждый раз. Таким образом, план выполнения не сохраняется, что приводит к снижению производительности.
SQL 2005 и более поздние версии, даже если у вас есть временная таблица в определении вашего процесса, она не будет перекомпилироваться при каждом выполнении. План выполнения будет отправлен повторно.
Комментарии:
1. В чем именно заключается ваш вопрос? В любом случае вы можете захотеть прочитать это
2. Проще говоря, заставляет ли наличие временной таблицы в хранимых процедурах ее перекомпилировать при каждом запуске?
3. Мой плохой, я только что протестировал это на моей временной таблице SQL 2008 R2 Express в sP, не приведет к перекомпиляции, и план будет возобновлен. У меня нет SQL 2000, поэтому я не могу протестировать, но у кого-нибудь все еще есть SQL2000, может подтвердить это
Ответ №1:
Вы совершенно правы в отношении SQL 2000. Для SQL 2005 инструкции, использующие временную таблицу, компилируются отдельно от хранимой процедуры и кэшируются, чтобы их можно было использовать повторно.
Смотрите Временные таблицы, табличные переменные и перекомпиляции в блоге команды разработчиков SQL Programmability amp; API. Перейдите к части, которая начинается с «Когда скомпилирована хранимая процедура DemoProc1, запрос insert и select не скомпилирован».
Комментарии:
1. Я советую всем, кто читает этот ответ, прочитать связанное сообщение в блоге, поскольку оно довольно четко объясняет, когда планы кэшируются, а когда нет. Не следует предполагать, что план обычно используется повторно.
2. Исходная ссылка больше не существует. Вот кэшированная копия с промежуточной машины ( web.archive.org/web/20120218072142/http://blogs.msdn.com/b /… )