Каковы различия между #myTable и объявить @myable столКакая разница между этими двумя типами таблиц? (# И @)
ответ
В хранимой процедуре, вы часто необходимость хранения набора данных в процедура, без , обязательно требует, чтобы данные до сохранялись за пределами процедуры . Если вам действительно нужна структура таблицы, есть в основном четыре способа вы можете «магазин» этот данные: локальных временных таблиц (#table_name), глобальных временные таблицы (## table_name), постоянные таблицы (table_name), и переменные таблицы (@table_name).
Should I use a #temp table or a @table variable?
местных и глобальных временных таблиц являются физические таблицы в базе данных Tempdb , индексы могут быть созданы .because временных таблиц физические таблицы, вы можете также создать первичный на них с помощью команды CREATE TABLE или с помощью команды ALTER TABLE . Вы можете использовать команду ALTER TABLE , чтобы добавить в ваш код любые значения по умолчанию, новые столбцы или ограничения, которые вам нужны .
В отличие от локальных и глобальных временных таблиц , переменные таблицы не могут иметь Созданные на них индексы. Исключением является то, что переменные таблицы могут иметь первичный ключ , определенный при создании , используя команду DECLARE @Variable TABLE . Затем будет создан кластерный или некластеризованный индекс на переменной таблицы. Команда CREATE INDEX не распознает переменные таблицы . Поэтому единственным доступным вам индексом является индекс, который сопровождает первичный ключ и составляет , созданный по переменной таблицы . Журналы транзакций также не записываются для переменных таблицы. Следовательно, они не входят в сферу действия механизма транзакции.
«#myTable - временная таблица и может быть полезной при наличии ограничений и индексов и т. Д. И использует больше ресурсов.
@myTable - это переменная таблицы, которую вы определяете как имеющую один или несколько столбцов. Они используют меньше ресурсов и привязаны к процедуре, в которой вы их используете.
В большинстве случаев, когда используется таблица темпа, вместо этого может использоваться таблица, которая может обеспечить преимущества производительности.
Пожалуйста, см:
Часто говорят, что @Table переменные сохраняются в памяти, в отличие от TempDb; это не обязательно правильно.
Переменные таблицы не имеют статистики, и это может повлиять на производительность в определенных ситуациях.
Таблица #tabel1
является локальной временной таблицей, хранящейся в tempdb. ##table1
- глобальная временная таблица, хранящаяся в tempdb.
и @table
- переменная таблицы.
Регулярно проверяйте link для их различий
Табличных переменных являются все хорошо, когда речь идет о сравнительно небольших наборах данных, но следует помнить, что они не очень хорошо масштабируются. В частности, изменение поведения SQL Server 2000 и SQL Server 2005 привело к снижению производительности через пол с большими наборами данных.
Это было особенно неприятно для меня в один конкретный случай с очень сложной хранимой процедурой на SQL Server 2000. Исследования и тестирование показали, что использование табличных переменных было более эффективным. Однако после обновления до SQL Server 2008 производительность ухудшилась значительно. Потребовалось некоторое время для хлопка, чтобы использовать переменные таблицы в качестве виновника, потому что все предыдущие тесты и т. Д. Исключали временные таблицы как бы более быстрые. Однако из-за этого изменения между версиями SQL Server обратное было правдивым и после значительного рефакторинга, то, что прошло хорошо, в двухзначные часы, чтобы завершить начатое завершение через пару минут!
Так что имейте в виду, что нет окончательного ответа относительно того, что лучше - вам нужно оценить свои обстоятельства, провести собственное тестирование и принять решение на основе ваших результатов. И всегда переоценивайте после обновления сервера.
Прочитайте эту статью для получения более подробной информации и образцов тайминги - http://www.sql-server-performance.com/articles/per/temp_tables_vs_variables_p1.aspx
Update: На отдельной ноте, следует помнить, что есть и третий тип временной таблицы - ## хуг. Они являются глобальными и видимыми для всех подключений SQL Server и не привязаны к текущему соединению, как обычные временные таблицы. Они удаляются только тогда, когда окончательное соединение, доступное к нему, закрывается.
- 1. Какая разница между этими двумя типами наследования?
- 2. Какая разница между этими двумя?
- 3. Какая разница между этими двумя?
- 4. Какая разница между этими двумя группами утверждений?
- 5. Python Какая разница между этими двумя строками?
- 6. Какая разница между этими двумя конфигурациями?
- 7. Какая разница между этими двумя строками?
- 8. Какая разница между этими двумя видами? (Авторотация)
- 9. Какая разница между этими двумя функциями Схемы?
- 10. Какая разница между этими двумя объявлениями указателя
- 11. iCal Какая разница между этими двумя правилами?
- 12. Какая разница между этими двумя определениями класса?
- 13. Какая разница между этими двумя последовательностями F #?
- 14. Какая разница между этими двумя утверждениями?
- 15. Какая разница между этими двумя свойствами?
- 16. Разница между этими двумя?
- 17. Разница между этими двумя
- 18. Есть ли разница между этими двумя типами заявлений о намерениях?
- 19. Рубин: Разница между этими двумя?
- 20. разница между этими двумя линиями
- 21. Какая разница между этими двумя объявлениями в javascript
- 22. Какая разница между этими двумя пакетами: Microsoft.WindowsAzure.Storage и Microsoft.WindowsAzure.MobileServices.Files
- 23. какая разница между этими двумя утверждениями ... context.getImageData(). Данные и
- 24. В чем разница между этими типами объявлений?
- 25. В чем разница между этими двумя типами функций?
- 26. Разница между этими двумя типами декларации в C++
- 27. В чем разница между этими двумя типами инициализации в фрагменте
- 28. В чем разница между этими двумя типами с использованием jquery
- 29. В чем разница между этими двумя типами кода загрузки изображений?
- 30. Разница между этими двумя отливками
Таблицы Temp ведут себя так же, как и w.r.t. память/диск. В памяти, где это возможно, сохраняется на диске, если он слишком большой, DDL, созданный в базе данных TempDB. – GilaMonster