SQL Проверка серверной временной таблицы производительности - PullRequest
1 голос
/ 25 февраля 2020
IF OBJECT_ID('tempdb..#mytesttable') IS NOT NULL
    DROP TABLE #mytesttable

SELECT id, name 
FROM 
INTO #mytesttable mytable

Вопрос: хорошо ли проверять существование временной таблицы (например: OBJECT_ID('tempdb..#mytesttable')), когда я впервые создаю эту временную таблицу внутри процедуры?

Что будет лучшим с точки зрения производительность

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Да, это хорошая практика. Я всегда делаю это в начале рутины. В SQL Server 2016 + объекты могут D IE (Drop If Exists), так что вы можете упростить вызов:

DROP TABLE IF EXISTS #mytesttable; 

Кроме того, даже в конце процедуры ваши временные объекты уничтожаются и даже механизм SQL присваивает уникальные имена временным таблицам, но следует учитывать и другое поведение.

Если вы называете временную таблицу с тем же именем, когда задействованы вложенные вызовы процедур (одна хранимая процедура вызывает другую ) возможно получить ошибку или испортить ваши данные. Это связано с тем, что временная таблица видна в текущей области выполнения, поэтому #table в одной процедуре будет видна во второй вызванной процедуре (поэтому вы можете изменить ее данные или удалить их).

0 голосов
/ 25 февраля 2020

Хорошей практикой является проверка того, существует таблица или нет. и это не оказывает никакого влияния на производительность. В любом случае, временные таблицы автоматически удаляются после завершения процедуры на сервере sql. sql сервер добавляет уникальный номер с именем временной таблицы. поэтому, если одна и та же процедура выполняется более одного раза одновременно, это не вызовет никаких проблем. это зависит от сессии. все исполнения проков имеют разные сессии.

...