|
|
|
Temp table VS table variable
|
|||
|---|---|---|---|
|
#18+
Что лучше использовать для больших объёмов данных? На табличные переменные я не могу сделать индекс, только ключ, вопрос используется ли он про выборке данных. Кто нибудь проводил какие-либо тесты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 17:51:43 |
|
||
|
Temp table VS table variable
|
|||
|---|---|---|---|
|
#18+
Для больших объемов быстрее временные таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 18:25:21 |
|
||
|
Temp table VS table variable
|
|||
|---|---|---|---|
|
#18+
Почти всегда быстрее временные таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 18:31:15 |
|
||
|
Temp table VS table variable
|
|||
|---|---|---|---|
|
#18+
Поскольку табличная переменная создается в памяти (и данные хранятся в памяти), то для больших объемов данных наверное предпочтительнее будет использовать tempdb (временные таблицы). Только убедитесь, что параметры роста tempdb позволят вам закачать туда Ваши данные. С другой стороны, если количество памяти на вашем сервере все-таки позволяет обрабатывать "большие объемы данных" - все-таки лучше использовать табличные переменные. Ведь доступ к памяти всегда на много порядков быстрее чем доступ к диску, даже самому быстрому. Я бы лично на вашем месте провел бы эксперимент.... С уважением, Дмитрий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 18:35:11 |
|
||
|
Temp table VS table variable
|
|||
|---|---|---|---|
|
#18+
>>Поскольку табличная переменная создается в памяти (и данные хранятся в памяти), ... Временные переменные также живут в tempdb ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 18:52:41 |
|
||
|
Temp table VS table variable
|
|||
|---|---|---|---|
|
#18+
Ну да, табличные переменные - те же временные таблицы .... вид сбоку))) разница одна, они не индексируются, отсюда и выигрышь для временных таблиц ПОЧТИ всегда (хотя, на самом деле, почти всегда разницы нет, просто если выигрышь есть, то для временных таблиц) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 19:10:48 |
|
||
|
Temp table VS table variable
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 19:13:46 |
|
||
|
Temp table VS table variable
|
|||
|---|---|---|---|
|
#18+
2 Dimos Ни слова об увеличении быстродейстия... Переменные предпочтительнее из-за безопасности применения (с точки зрения программиста): ограниченная область видимости, автоматическая очистка/удаление; меньшее потребление ресурсов. При чем здесь производительность? А меньшее количество перекомпиляций - миф. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 19:21:58 |
|
||
|
Temp table VS table variable
|
|||
|---|---|---|---|
|
#18+
1)табличные переменные не живут в tempdb....(они там бывают только когда не хватает озу < не уверен даже что в tempdb см.пункт 2... скорее даже в своп>) 2) табличные переменные не участвуют в тразакции... т.е. добавте в нее что нибудь сделайте откат и убиждение приходи разом.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 19:44:35 |
|
||
|
Temp table VS table variable
|
|||
|---|---|---|---|
|
#18+
2 Darth Vader: Цитирую: In general, table variables contribute to more efficient query processing Я бы лично на вашем месте провел бы эксперимент.... Ну а про миф о перекомпиляции спорить не буду так как у меня недостаточно информации для аргументированной дискуссии на эту тему. Хочу только добавить следующее: совершенно необязательно что наличие (и использование) индекса (временные таблицы хороши индексами, которые на них можно навесить) будет работать быстрее чем просто table scan. Все зависит от того, насколько этот индекс селективен и покрывает запрос. Хотя на больших объемах данных естественно индекс как правило помогает сократить количество "просматриваемых" записей. Короче, уважаемый sahon, поставьте просто эксперимент если сомневаетесь... С уважением, Дмитрий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 19:47:52 |
|
||
|
Temp table VS table variable
|
|||
|---|---|---|---|
|
#18+
2 Dimos Да читал я, читал эти изыски. Как Вы справедливо заметели, нужен эксперимент. А индексы будут полезны, если по временной таблице делается join и совсем полезны, если несколько join, тогда переменные и рядом не стоят по быстродействию с таблицами. А из моего опыта следует, что join с временной таблицей выполняется весьма часто. С уважением, Констнтин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 19:59:25 |
|
||
|
Temp table VS table variable
|
|||
|---|---|---|---|
|
#18+
всем спасибо, у меня порядка 50000 записей на таблицу, я по простоте душевной поверив BOL начал использовать переменные - ан нет - вот думаю нужно опять все переписать. А результаты теста не помешали бы... И памяти немерянно порядка 2GB на сервере, но я особо не чувствую разницы между навороченным сервером и обычным компьютером, это к вопросу помещается ли таблица в памяти. И join у меня используется.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2002, 21:08:21 |
|
||
|
Temp table VS table variable
|
|||
|---|---|---|---|
|
#18+
Если join используется - тогда что и говорить, нужна временная таблица... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 02:06:31 |
|
||
|
Temp table VS table variable
|
|||
|---|---|---|---|
|
#18+
1)Я проверял на одной задачке (давненько проскакивал топик "2.......Приглашение на тест" в котором считали счастливые билеты) скрость работы временной таблицы и табличной переменной не отличалась помоему таблична переменная даже чуть-чуть уступала (ЭТОТ ТЕСТ НЕ о чем не говорит так как в обойх случаях таблицы содержали объем данных меньше 1 страницы). 2) А для того что бы таблица сидела в памяти нужно сделасть dbcc pintable. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 09:00:38 |
|
||
|
Temp table VS table variable
|
|||
|---|---|---|---|
|
#18+
табличные переменные не живут в tempdb Еще как живут! Причем даже совершенно пустые. Убедиться в этом просто экспериментом. Запусти в QA сначала Код: plaintext А потом Код: plaintext 1. Увидишь добавление таблички с названием что-нибудь наподобие #1F70C19B ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 10:52:12 |
|
||
|
Temp table VS table variable
|
|||
|---|---|---|---|
|
#18+
а учавствует ли PrimaryKey в табличной переменной как индекс для поиска данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 21:36:27 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32067119&tid=1818831]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
| others: | 212ms |
| total: | 399ms |

| 0 / 0 |
