powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / почему @табличная переменная работает быстрей чем #временная таблица на INSERT?
9 сообщений из 59, страница 3 из 3
почему @табличная переменная работает быстрей чем #временная таблица на INSERT?
    #38976114
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как посмореть транзакцию на табличную переменную (а то некоторые упертые личности могут счесть картинку не показательной):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
use tempdb;

declare @t table ([@t_column1] int);

select
 object_name(object_id)
from
 sys.columns
where
 name = N'@t_column1';

declare @c nvarchar(30), @x nvarchar(30);
select @c = max([Current LSN]) from sys.fn_dblog(null, null);

insert into @t values (1);
select @x = [Transaction ID] from sys.fn_dblog(null, null) where [Current LSN] > @c and SPID = @@spid and [Transaction Name] = N'TVQuery' and Operation = N'LOP_BEGIN_XACT';

select * from sys.fn_dblog(null, null) where [Transaction ID] = @x;
...
Рейтинг: 0 / 0
почему @табличная переменная работает быстрей чем #временная таблица на INSERT?
    #38976194
PVA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PVA
Гость
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
почему @табличная переменная работает быстрей чем #временная таблица на INSERT?
    #39873500
Александр Бердышев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема конечно холиварная.

Написал хранимую процедуру, для хранения выборки внутри ней (около 5000 строк), чтобы несколько раз одни и те же данные из таблиц не выбирать, использовал табличную переменную - думал на табличных переменных всегда работает быстрее.

Код получился очень громоздкий.
Решил переписать с использованием временных таблиц и разбить на несколько процедур - чтобы проще код смотреть было.

В итоге на временных таблицах работает быстрее, примерно на треть.

Почитал тут обсуждение - рекомендуют использовать табличную переменную в случаях, когда нужно хранить 100 записей и менее.

В остальных случаях лучше использовать временные таблицы.
...
Рейтинг: 0 / 0
почему @табличная переменная работает быстрей чем #временная таблица на INSERT?
    #39873545
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Бердышев,

вот прям новость, но с какого-то... 2012-14 статистика внутри табличных переменных уже адекватна
...
Рейтинг: 0 / 0
почему @табличная переменная работает быстрей чем #временная таблица на INSERT?
    #39873567
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Табличная переменная, в отличии от временной таблицы не ведет статистику и не участвует в явной транзакции (если есть явнвя транзакция). Возможно дело в этом.
...
Рейтинг: 0 / 0
почему @табличная переменная работает быстрей чем #временная таблица на INSERT?
    #39873569
0wl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
0wl
Гость
TaPaK,

Не совсем. Начиная с 2014 сиквел считает, что в табличной переменной не одна строка, а 100. Иногда действительно выручает. Плюс, появился флаг 2453, который приводит к перекомпиляции плана с учетом данных от предыдущего выполнения запроса.

В 2019 обещают светлое будущее и более адекватную статистику для переменных.
...
Рейтинг: 0 / 0
почему @табличная переменная работает быстрей чем #временная таблица на INSERT?
    #39873648
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0wlTaPaK,

Не совсем. Начиная с 2014 сиквел считает, что в табличной переменной не одна строка, а 100. Иногда действительно выручает. Плюс, появился флаг 2453, который приводит к перекомпиляции плана с учетом данных от предыдущего выполнения запроса.

В 2019 обещают светлое будущее и более адекватную статистику для переменных.
Что за фантазии всем пунктам
...
Рейтинг: 0 / 0
почему @табличная переменная работает быстрей чем #временная таблица на INSERT?
    #39873659
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKАлександр Бердышев,

вот прям новость, но с какого-то... 2012-14 статистика внутри табличных переменных уже адекватна

Неужели ms нам врет? )


https://docs.microsoft.com/en-us/sql/t-sql/data-types/table-transact-sql?view=sql-server-2017 Table variables don't have distribution statistics
...
Рейтинг: 0 / 0
почему @табличная переменная работает быстрей чем #временная таблица на INSERT?
    #39873811
0wl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
0wl
Гость
TaPaK,
Да " https://dba.stackexchange.com/questions/16385/whats-the-difference-between-a-temp-table-and-table-variable-in-sql-server%22%5D%D1%84%D0%B0%D0%BD%D1%82%D0%B0%D0%B7%D0%B5%D1%80%D0%BE%D0%B2]https://dba.stackexchange.com/questions/16385/whats-the-difference-between-a-temp-table-and-table-variable-in-sql-server"]фантазеров " https://www.mssqltips.com/sqlservertip/5662/table-variable-deferred-compilation-in-sql-server/ "]всяких начитался

Про 100 строк -- каюсь, не нашёл (хотя в планах, помню, видел. Но пруфов под рукой нет, спишем на усталость зрения)

Но факт в том, что главное, почему "в 2012-2014" статистика (точнее предполагаемое число строк) может быть "адекватна" -- это флаг 2453
...
Рейтинг: 0 / 0
9 сообщений из 59, страница 3 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / почему @табличная переменная работает быстрей чем #временная таблица на INSERT?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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