|
|
|
Использование временных таблиц
|
|||
|---|---|---|---|
|
#18+
Для получения упорядоченых номеров строк я создаваю временные таблицы со случайными именами и вних вставляю IDENTITY(smallint, 1, 1) . После выборки результата - execute('DROP TABLE '+@tmp). Создание и удаление таблиц очевидно не есть хорошая вещь. Вопросы: Чем может обернуться частое создание и удаление таблиц? Может есть лучшее решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2002, 04:54:17 |
|
||
|
Использование временных таблиц
|
|||
|---|---|---|---|
|
#18+
Первое что пришло в голову Если ты часто используешь временную таблицу, то вместо постоянного CREATE... DROP... (кстати, данные операции записываются в лог, правда tempdb имеет модель simple), лучше делать TRUNCATE TABLE - быстрее работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2002, 09:54:11 |
|
||
|
Использование временных таблиц
|
|||
|---|---|---|---|
|
#18+
Не совсем понятна ваша трактовка термина временная таблица. Это все таки системная временная таблица или ваша "временная" таблица. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2002, 10:26:35 |
|
||
|
Использование временных таблиц
|
|||
|---|---|---|---|
|
#18+
Временная - моя таблица : execute('CREATE TABLE '+@temptable) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 04:40:40 |
|
||
|
Использование временных таблиц
|
|||
|---|---|---|---|
|
#18+
немного подробнее о задаче: Необходимо для нескольких пользователей практически одновременно делать выборку из таблицы во "временную" со вставкой в результат выборки IDENTITY(). Я пошел по самому тривиальному пути - каждому пользователю отсылать выборку в таблицу со случайным именем и после получения выборки удалять эту таблицу. По этому я и назвал такие таблицы временными. И повторяясь: Насколько плох (и чем) этот способ? Можете посоветовать лучший способ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 05:01:58 |
|
||
|
Использование временных таблиц
|
|||
|---|---|---|---|
|
#18+
=Насколько плох (и чем) этот способ? Плох тем, что плохая масштабируемость. Если пользователей много, то генерить каждому пользователю таблицу - дорогое удовольствие. Может лучше добавить в таблицу ID пользователя ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 09:54:30 |
|
||
|
Использование временных таблиц
|
|||
|---|---|---|---|
|
#18+
Опять же маштабируемость Чем тебе не нравится использование временных таблиц SQL Server ? Если, конечно, это не связано с маштабной переделкой проекта. А способ TRUNCATE - однозначно лучше, быстрее и лог не растет. Только учти, что в truncate нельзя использовать where..., т.е. таблица полностью очищается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 10:20:21 |
|
||
|
Использование временных таблиц
|
|||
|---|---|---|---|
|
#18+
Спасибо за советы. Попробую подытожить: 1. Приложение вызывает хранимую процедуру 2. в процедуре создается #temp_table, 3. в нее пишутся результаты выборки 4. результаты считываются 5. TRUNCATE Что будет происходить если одновременно эту процедуру будут выполнять несколько приложений? Не заблокируется временная таблица? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 10:33:24 |
|
||
|
Использование временных таблиц
|
|||
|---|---|---|---|
|
#18+
Примерно так: >1. Приложение вызывает хранимую процедуру >2. в процедуре создается #temp_table, >3. в нее пишутся результаты выборки >4. результаты считываются >5. TRUNCATE п.5 не нужен, поскольку таблица временная ( в терминах именно SQL Server'a, если создавать как #table_name, именно с #), по окончании сессии она должна благополучно грохаться, сама. Блокировки тоже не будет, поскольку для каждой сессии создается уникальная таблица. ежели не прав, пинайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 11:00:18 |
|
||
|
Использование временных таблиц
|
|||
|---|---|---|---|
|
#18+
2abrikos Спасибо за советы. Попробую подытожить: 1. Приложение вызывает хранимую процедуру 2. в процедуре создается #temp_table, 3. в нее пишутся результаты выборки 4. результаты считываются 5. TRUNCATE Что будет происходить если одновременно эту процедуру будут выполнять несколько приложений? Не заблокируется временная таблица? Выбирайте один из двух путей: 1. Если временная таблица нужна только в одной процедуре и в вызываемыхиз ней процедурах, то создаёте временную таблицу в ней (create table #MyTable(...)). Дропать её не надо - она сама исчезнет после выхода из процедуры. Другие пользователи её не увидят. 1. Если временная таблица нужна при вызове многих процедур, и/или длительное время, то создаёте временную таблицу в коннекте (из клиента). Дропать её нужно, когда она не нужна, но она сама исчезнет после закрытия коннекта. Другие пользователи её не увидят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 11:06:49 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32062926&tid=1819221]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 355ms |

| 0 / 0 |
