Я понимаю, чего вы пытаетесь достичь. Добро пожаловать в мир разнообразных баз данных!
SQL Server 2000 поддерживает временные таблицы, созданные путем добавления префикса # к имени таблицы, что делает ее локально доступной временной таблицей (локальной для сеанса) и предшествующего ## имени таблицы для глобально доступных временных таблиц, например, #MyLocalTable и ##MyGlobalTable соответственно.
SQL Server 2005 и более поздние версии поддерживают как временные таблицы (локальные, глобальные), так и табличные переменные — обратите внимание на новые функции для табличных переменных в SQL 2008 и выпустите две! Разница между временными таблицами и табличными переменными не так велика, но заключается в том, как сервер базы данных их обрабатывает.
Я бы не хотел говорить о более старых версиях SQL-сервера, таких как 7, 6, хотя я работал с ними, и в любом случае я пришел оттуда :-)
Принято считать, что табличные переменные всегда находятся в памяти, но это неверно. В зависимости от использования памяти и объема транзакций сервера базы данных страницы табличных переменных могут быть экспортированы из памяти и записаны в базу данных tempdb, а остальная обработка выполняется там (в базе данных tempdb).
Обратите внимание, что tempdb — это база данных на экземпляре, не имеющая постоянных объектов по своей природе, но она отвечает за обработку рабочих нагрузок, включающих побочные транзакции, такие как сортировка, и другую работу по обработке, которая носит временный характер. С другой стороны, табличные переменные (обычно с меньшими данными) хранятся в памяти (ОЗУ), что ускоряет доступ к ним и, следовательно, уменьшает дисковый ввод-вывод с точки зрения использования диска tempdb при использовании табличных переменных с меньшими данными по сравнению с временными таблицами, которые всегда войдите в базу данных tempdb.
Табличные переменные не могут быть проиндексированы, в то время как временные таблицы (как локальные, так и глобальные) могут быть проиндексированы для более быстрой обработки в случае большого объема данных. Таким образом, вы знаете свой выбор в случае более быстрой обработки больших объемов данных временными транзакциями. Также стоит отметить, что транзакции только с табличными переменными не регистрируются и не могут быть отброшены, в то время как транзакции, выполненные с временными таблицами, могут быть отброшены!
Таким образом, табличные переменные лучше подходят для небольших данных, а временные таблицы лучше подходят для временной обработки больших данных. Если вам также нужен надлежащий контроль транзакций с помощью блоков транзакций, табличные переменные не подходят для отката транзакций, поэтому в этом случае вам лучше использовать временные таблицы.
Наконец, временные таблицы всегда будут увеличивать дисковый ввод-вывод, поскольку они всегда используют базу данных tempdb, в то время как табличные переменные могут не увеличивать ее, в зависимости от уровня нагрузки на память.
Дайте мне знать, если вам нужны советы о том, как настроить базу данных tempdb, чтобы добиться более высокой производительности, превышающей 100%!
person
Community
schedule
10.06.2009