В чем преимущество создания временных таблиц (#table) вместо постоянных таблиц (table)? - PullRequest
0 голосов
/ 06 июля 2011

Я могу представить себе два основных преимущества:

  1. Предотвращение проблем параллелизма, если у вас есть много процессов, создающих / удаляющих таблицы, вы можете столкнуться с проблемами, когда один процесс пытается создать уже существующую таблицу.
  2. Производительность. Я полагаю, что создание временных таблиц (с #) более производительно, чем обычных таблиц.

Есть ли какая-либо другая причина, и является ли какая-либо из моих причин ложной?

Ответы [ 3 ]

1 голос
/ 06 июля 2011

Вы не можете сравнивать временные и постоянные таблицы:

  • Постоянные таблицы хранят ваши данные и могут использоваться любым процессом.
  • Временные отбрасываются, и #ones видны только для этого соединения

Вы бы использовали временную таблицу для спулинга результатов для дальнейшей обработки и тому подобное.

Существует небольшая разница в производительности (в любом случае) между двумя типами таблиц.

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

0 голосов
/ 12 июля 2011

1) Срок службы табличной переменной - только на время транзакции, в которой она выполняется. Если мы сначала выполним оператор DECLARE, то попытаемся вставить записи в табличную переменную @temp, мы получим ошибку, потому что переменная таблицы имеетисчез из существования.Результаты будут одинаковыми, если мы объявим и вставим записи в @temp в одной транзакции, а затем попытаемся выполнить запрос к таблице.Если вы заметили, нам нужно выполнить инструкцию DROP TABLE для #temp.Это связано с тем, что таблица сохраняется до окончания сеанса или до тех пор, пока таблица не будет удалена.

2) переменные таблицы имеют определенные четкие ограничения.

-Табличные переменные не могут иметь некластеризованные индексы -Вы не можете создавать ограничения в табличных переменных -Вы не можете создавать значения по умолчанию для столбцов переменных таблицы -Статистика не может быть создана для переменных таблицы -Сходства с временными таблицамиinclude:

Сходства с временными таблицами включают в себя:

-Instaltiated в tempdb -Кластерные индексы могут быть созданы для табличных переменных и временных таблиц -До регистрируются в журнале транзакций -Только как с tempВ обычных таблицах пользователи могут выполнять все запросы языка изменения данных (DML) к табличной переменной: SELECT, INSERT, UPDATE и DELETE.

0 голосов
/ 06 июля 2011

(1) Временные таблицы создаются в базе данных TEMPDB SQL Server и поэтому требуют больше ресурсов ввода-вывода и блокировки.Переменные таблиц и производные таблицы создаются в памяти.

(2) Временные таблицы обычно работают лучше для больших объемов данных, которые можно обрабатывать с использованием параллелизма, тогда как переменные таблиц лучше всего использовать для небольших объемов данных (Iиспользуйте правило, состоящее из 100 или менее строк), где параллелизм не обеспечит существенного улучшения производительности.

(3) Вы не можете использовать хранимую процедуру для вставки данных в переменную таблицы или производную таблицу.Например, будет работать следующее: INSERT INTO #MyTempTable EXEC dbo.GetPolicies_sp, тогда как следующее вызовет ошибку: INSERT INTO @MyTableVariable EXEC dbo.GetPolicies_sp.

(4) Производные таблицы могут создаваться только изОператор SELECT, но может использоваться в операторе вставки, обновления или удаления.

(5) В порядке долговечности области, временные таблицы расширяют область действия дальше всего, за ними следуют переменные таблиц и, наконец, производные таблицы.

...