В чем разница между двумя типами временных таблиц @tmp vs #tmp в SQL 2005? и являются ли они их другими типами, о которых я не знаю?sql temp tables @tmp vs #tmp
благодарит
В чем разница между двумя типами временных таблиц @tmp vs #tmp в SQL 2005? и являются ли они их другими типами, о которых я не знаю?sql temp tables @tmp vs #tmp
благодарит
#tmp
является временным столом и действует как настоящий стол в основном. Он может иметь индексы, иметь статистику, участвовать в транзакциях, оптимизатор будет выработать правильные оценки строк
@tmp
- это переменная таблицы. Нет индексов, нет статистики, а не транзакции, оптимизатор всегда принимает ровно 1 строку
В противном случае они оба ограничены (немного отличаются) в памяти/кеше, но контекст темпдб, однако, будет разливаться на диск, если слишком большой и т. Д.
Редактировать:
О ключах на переменных таблицы. Они делают нет разница. Нет статистики, и предполагается одна строка. Он изменит сканирование таблицы на кластеризованное сканирование индекса, которое будет таким же. Проверьте любой план запроса и оценочные строки.
Кроме того, только что прочитал эту прочитанной What a difference a temp table makes over a table variable
Первое, что я был поставлен первичный ключ переменной @ComputersToProcess таблицы. Это превратило сканирование таблицы в кластерное сканирование индексов, но ничего не делало для производительности.
Вы можете объявить переменную таблицы @tmp с кластеризованным индексом, но вы не можете добавлять какие-либо некластеризованные индексы (или ALTER it later) – BradC
@BradC: он не отличается от того, как его использовали, хотя из-за отсутствия статистики ... – gbn
У него может не быть статистики, но я не уверен, что это еще не изменило ситуацию. См. Http://msdn.microsoft.com/en-us/library/aa175774(SQL.80).aspx – BradC
@tmp
относится к переменной типа таблицы, сохраненной в памяти, тогда как #tmp
относится к таблице в базе данных TEMP
.
Существует еще один тип «таблицы темпа». Я использую CTE, это похоже на создание временной таблицы.
Просто добавление к существующим ответам. На самом деле есть типы временных таблиц. В дополнение к другим ответам вы можете создавать глобальные временные таблицы, например, так: ##globalTempTable
Это видно для всех подключений к серверу sql и редко используются, однако полезно отметить, что они действительно существуют.
Вот хорошо читать на разнице между стандартными и глобальными временными таблицами http://www.codeproject.com/KB/database/TempTable.aspx
См http://support.microsoft.com/kb/305977:
Табличных переменными имеют следующие преимущества по сравнению с временными таблицами:
Вот некоторые из недостатков по сравнению с временными таблицами:
Существуют ли таблицы переменных структуры только для памяти, которые гарантируют лучшую производительность по сравнению с временными или постоянными таблицами, потому что они поддерживаются в базе данных, которая находится на физическом диске?
Для практического сравнения производительности, смотри также:
Вы уже отмечали ответ, но, пожалуйста, проверьте другие ответы, так вы не останетесь с ложными впечатлениями о том, как SQL-сервер хранит временные данные. – ulty4life