Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
pgalaktionov Member Откуда: Санкт-Петербург Сообщений: 54 |
Подскажите пожалуйста, какой есть выигрыш от использование временных таблиц в MSSQL. Например в Oracle не логируются операции-транзакции по временным таблицам и не пишется redo log. Как это происходит с временными таблицами в MSSQL? |
4 авг 16, 22:31 [19502164] Ответить | Цитировать Сообщить модератору |
leov Member Откуда: С-Петербург Сообщений: 616 |
pgalaktionov, тут они точно в транзакции а также само создание таблиц тоже под транзакцией т.е если под транзакцией создаешь а потом откатываешся то таблицы нету табличные переменные вроде без транзакции работают |
4 авг 16, 22:51 [19502207] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
|
||
4 авг 16, 22:58 [19502231] Ответить | Цитировать Сообщить модератору |
leov Member Откуда: С-Петербург Сообщений: 616 |
но вот накрапал тест и вроде таки вне транзакции оно declare @t table(id int) insert @t(id) values(1) select * from @t begin tran insert @t(id) values(2) select * from @t rollback select * from @t (1 row(s) affected) id ----------- 1 (1 row(s) affected) (1 row(s) affected) id ----------- 1 2 (2 row(s) affected) id ----------- 1 2 (2 row(s) affected) |
||||
4 авг 16, 23:08 [19502271] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
Сообщение было отредактировано: 4 авг 16, 23:13 |
||||
4 авг 16, 23:11 [19502285] Ответить | Цитировать Сообщить модератору |
leov Member Откуда: С-Петербург Сообщений: 616 |
Гавриленко Сергей Алексеевич, я не буду спорить по терминологии но какая-же это нафиг транзакция если она не может откатиться |
4 авг 16, 23:20 [19502338] Ответить | Цитировать Сообщить модератору |
Павел-П Member Откуда: Сообщений: 234 |
leov, ну вот такая вот слегка обрезенная транзакция :-) http://www.sqlservercentral.com/articles/Temporary Tables/66720/ |
5 авг 16, 00:41 [19502718] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31780 |
С временными таблицами ваш тест вернул бы другой результат. Терминология тоже важна. Вы спрашиваете про одно, а все поняли вопрос по другому. |
||
5 авг 16, 01:40 [19502913] Ответить | Цитировать Сообщить модератору |
LSV Member [заблокирован] Откуда: Киев Сообщений: 30817 |
Создаем врем.таблицу. Удобно делать так: select ...into #MyTmp from .... and 1=2 В этом конекшене эта таблица будет видна в запросах, в ХП. В функциях не видна. :( Очень удобно наполнять ВТ данными (например списки ID для фильтрации), а потом выполнять к-л сложный запрос или ХП. Удобно применять в сложных отчетах или переливках. Работает быстро. При необходимости можно проиндексировать. В транзакциях участвует. Недостатки: * В случае кратковременного дисконнекта, ВТ сразу дропается и приложение может жоско заглючить. * Увлечение большими ВТ хорошо кушает память. * не видна из другого коннекшена, если приложение использует их несколько. Итог: при грамотном применении - очень удобная и нужная штука. |
||
5 авг 16, 09:29 [19503322] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
Не выигрыш, а архитектурная возможность. Нигде нет выигрыша. Не верю, что rollback в Оракле не работает с временными таблицами. |
||
5 авг 16, 11:36 [19504345] Ответить | Цитировать Сообщить модератору |
baracs Member Откуда: Москва Сообщений: 7206 |
Живут в системной tempdb.
|
||||||||
5 авг 16, 12:10 [19504592] Ответить | Цитировать Сообщить модератору |
pgalaktionov Member Откуда: Санкт-Петербург Сообщений: 54 |
Владислав Колосов,
Откатиться конечно можно. Я имел ввиду, что не логируются изменения во временных таблицах, не пишется redo логи, в МSSQL это транзакт лог, если я правильно понимаю. Вот пример работы временных таблиц в Oracle. В приложении используются промежуточные таблицы для обработки данных, потом на их основе получается результирующая таблица. Промежуточные удаляются. Промежуточные таблицы я сделал временными GTT в Oracle. И получил серьезный выигрыш в производительности. Выполнялись один и те же запросы, |
||
5 авг 16, 14:19 [19505627] Ответить | Цитировать Сообщить модератору |
pgalaktionov Member Откуда: Санкт-Петербург Сообщений: 54 |
pgalaktionov, И я хотел понять, может ли быть подобный результат от использования временных таблиц в MSSQL |
5 авг 16, 14:21 [19505643] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
pgalaktionov, В MSSQL журнал транзакций содержит и redo и undo. Для tempdb, где физически располагаются временные таблицы и таблицы-переменные, redo не пишется в ЖТ, т.к. для этой БД не требуется выполнять recovery. |
5 авг 16, 14:37 [19505782] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
|
||
5 авг 16, 15:00 [19505974] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
Существуют СУБД вообще без транзакций. Вы можете использовать минимальное протоколирование для более быстрой вставки. https://msdn.microsoft.com/ru-ru/library/dd425070(en-us).aspx |
5 авг 16, 15:16 [19506072] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |