powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Temp table VS table variable
17 сообщений из 17, страница 1 из 1
Temp table VS table variable
    #32067093
sahon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что лучше использовать для больших объёмов данных?
На табличные переменные я не могу сделать индекс, только ключ, вопрос используется ли он про выборке данных. Кто нибудь проводил какие-либо тесты?
...
Рейтинг: 0 / 0
Temp table VS table variable
    #32067114
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для больших объемов быстрее временные таблицы
...
Рейтинг: 0 / 0
Temp table VS table variable
    #32067119
Darth Vader
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почти всегда быстрее временные таблицы
...
Рейтинг: 0 / 0
Temp table VS table variable
    #32067121
Dimos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поскольку табличная переменная создается в памяти (и данные хранятся в памяти), то для больших объемов данных наверное предпочтительнее будет использовать tempdb (временные таблицы).
Только убедитесь, что параметры роста tempdb позволят вам закачать туда Ваши данные.

С другой стороны, если количество памяти на вашем сервере все-таки позволяет обрабатывать "большие объемы данных" - все-таки лучше использовать табличные переменные. Ведь доступ к памяти всегда на много порядков быстрее чем доступ к диску, даже самому быстрому.

Я бы лично на вашем месте провел бы эксперимент....

С уважением, Дмитрий
...
Рейтинг: 0 / 0
Temp table VS table variable
    #32067131
mishgan2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>Поскольку табличная переменная создается в памяти (и данные хранятся в памяти), ...
Временные переменные также живут в tempdb
...
Рейтинг: 0 / 0
Temp table VS table variable
    #32067143
Darth Vader
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну да, табличные переменные - те же временные таблицы .... вид сбоку))) разница одна, они не индексируются, отсюда и выигрышь для временных таблиц ПОЧТИ всегда (хотя, на самом деле, почти всегда разницы нет, просто если выигрышь есть, то для временных таблиц)
...
Рейтинг: 0 / 0
Temp table VS table variable
    #32067144
Dimos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 mishgan2000 - признаю свою ошибку.
Действительно, табличные переменные хранятся в tempdb...
Тем не менее, рекомендации остаются в силе (BOL):
Temporary tables are useful in cases when indexes need to be created explicitly on them, or when the table values need to be visible across multiple stored procedures or functions. In general, table variables contribute to more efficient query processing.
Use table variables instead of temporary tables, whenever possible. table variables provide the following benefits:
A table variable behaves like a local variable. It has a well-defined scope, which is the function, stored procedure, or batch in which it is declared.
Within its scope, a table variable may be used like a regular table. It may be applied anywhere a table or table expression is used in SELECT, INSERT, UPDATE, and DELETE statements. However, table may not be used in the following statements:

INSERT INTO table_variable EXEC stored_procedure
SELECT select_list INTO table_variable statements.

table variables are cleaned up automatically at the end of the function, stored procedure, or batch in which they are defined.

table variables used in stored procedures result in fewer recompilations of the stored procedures than when temporary tables are used.

Transactions involving table variables last only for the duration of an update on the table variable. Thus, table variables require less locking and logging resources.
...
Рейтинг: 0 / 0
Temp table VS table variable
    #32067149
Darth Vader
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Dimos

Ни слова об увеличении быстродейстия...
Переменные предпочтительнее из-за безопасности применения (с точки зрения программиста): ограниченная область видимости, автоматическая очистка/удаление; меньшее потребление ресурсов.

При чем здесь производительность? А меньшее количество перекомпиляций - миф.
...
Рейтинг: 0 / 0
Temp table VS table variable
    #32067160
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1)табличные переменные не живут в tempdb....(они там бывают только когда не хватает озу < не уверен даже что в tempdb см.пункт 2... скорее даже в своп>)
2) табличные переменные не участвуют в тразакции...
т.е. добавте в нее что нибудь сделайте откат и убиждение приходи разом....
...
Рейтинг: 0 / 0
Temp table VS table variable
    #32067167
Dimos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Darth Vader:
Цитирую:
In general, table variables contribute to more efficient query processing

Я бы лично на вашем месте провел бы эксперимент....

Ну а про миф о перекомпиляции спорить не буду так как у меня недостаточно информации для аргументированной дискуссии на эту тему.

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

Короче, уважаемый sahon, поставьте просто эксперимент если сомневаетесь...

С уважением,
Дмитрий
...
Рейтинг: 0 / 0
Temp table VS table variable
    #32067172
Darth Vader
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Dimos

Да читал я, читал эти изыски. Как Вы справедливо заметели, нужен эксперимент. А индексы будут полезны, если по временной таблице делается join и совсем полезны, если несколько join, тогда переменные и рядом не стоят по быстродействию с таблицами. А из моего опыта следует, что join с временной таблицей выполняется весьма часто.

С уважением,
Констнтин
...
Рейтинг: 0 / 0
Temp table VS table variable
    #32067185
sahon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем спасибо, у меня порядка 50000 записей на таблицу, я по простоте душевной поверив BOL начал использовать переменные - ан нет - вот думаю нужно опять все переписать. А результаты теста не помешали бы... И памяти немерянно порядка 2GB на сервере, но я особо не чувствую разницы между навороченным сервером и обычным компьютером, это к вопросу помещается ли таблица в памяти. И join у меня используется..
...
Рейтинг: 0 / 0
Temp table VS table variable
    #32067210
Dimos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если join используется - тогда что и говорить, нужна временная таблица...
...
Рейтинг: 0 / 0
Temp table VS table variable
    #32067256
1)Я проверял на одной задачке (давненько проскакивал топик "2.......Приглашение на тест" в котором считали счастливые билеты) скрость работы временной таблицы и табличной переменной не отличалась помоему таблична переменная даже чуть-чуть уступала (ЭТОТ ТЕСТ НЕ о чем не говорит так как в обойх случаях таблицы содержали объем данных меньше 1 страницы).

2) А для того что бы таблица сидела в памяти нужно сделасть dbcc pintable.
...
Рейтинг: 0 / 0
Temp table VS table variable
    #32067310
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
табличные переменные не живут в tempdb

Еще как живут! Причем даже совершенно пустые. Убедиться в этом просто экспериментом.

Запусти в QA сначала

Код: plaintext
select * from tempdb..sysobjects where type='U'


А потом

Код: plaintext
1.
select * from tempdb..sysobjects where type='U'
declare @t table (t int)


Увидишь добавление таблички с названием что-нибудь наподобие #1F70C19B
...
Рейтинг: 0 / 0
Temp table VS table variable
    #32067718
sahon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а учавствует ли PrimaryKey в табличной переменной как индекс для поиска данных?
...
Рейтинг: 0 / 0
Temp table VS table variable
    #32067723
Dimos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что план запроса говорит?
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Temp table VS table variable
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]