powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Insert #Table vs @Table
15 сообщений из 15, страница 1 из 1
Insert #Table vs @Table
    #39925054
Алексаша
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Ms sql server 2017

Почему вставка результата запроса во временную таблицу происходит намного быстрее нежели в табличную переменную (5 сек. против 35 сек)
[dbo].[ssf_WordDifference] - CLR функция

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
DECLARE
	@Fam varchar(50) = 'Фамилия'
	,@Nam VARCHAR(50) = 'Имя'
	,@Mid VARCHAR(50) = 'Отчество'
	
	drop table #FIO
	DECLARE @FIO TABLE (FaceMainGUID UNIQUEIDENTIFIER)
	CREATE TABLE #FIO (FaceMainGUID UNIQUEIDENTIFIER)

					INSERT #FIO
					SELECT ff.FaceMainGUID
						FROM dbo.FaceFIO ff
						WHERE
							([dbo].[ssf_WordDifference]([kFam], @Fam) <= 2 ) and
							([dbo].[ssf_WordDifference]([kNam], @Nam) <= 2 ) and
							([dbo].[ssf_WordDifference]([kMid], @Mid) <= 2 )

					INSERT @FIO
					SELECT ff.FaceMainGUID
						FROM dbo.FaceFIO ff
						WHERE
							([dbo].[ssf_WordDifference]([kFam], @Fam) <= 2 ) and
							([dbo].[ssf_WordDifference]([kNam], @Nam) <= 2 ) and
							([dbo].[ssf_WordDifference]([kMid], @Mid) <= 2 )
...
Рейтинг: 0 / 0
Insert #Table vs @Table
    #39925055
Алексаша
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Insert #Table vs @Table
    #39925056
Алексаша
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Insert #Table vs @Table
    #39925058
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексаша,

желтые двойные стрелочки виноваты.
SQL предпологает что в @ вставляется одна запись и не параллелит. OPTION (RECOMPILE) или далее по версиям варианты
...
Рейтинг: 0 / 0
Insert #Table vs @Table
    #39925064
Алексаша
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

там где двойные стрелочки это вставка во временную таблицу. т.е. их наличие в данном случае это хорошо, так?
...
Рейтинг: 0 / 0
Insert #Table vs @Table
    #39925066
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексаша
TaPaK,

там где двойные стрелочки это вставка во временную таблицу. т.е. их наличие в данном случае это хорошо, так?

ну понятие "хорошо" относительно :) Вообще табличные переменные это большая недоделка, которую постоянно пытаются довести до жизненной, так что по возможности не пользуйтесь
...
Рейтинг: 0 / 0
Insert #Table vs @Table
    #39925070
Алексаша
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

Спасибо, буду иметь в виду.
...
Рейтинг: 0 / 0
Insert #Table vs @Table
    #39925084
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексаша,

https://dba.stackexchange.com/questions/16385/whats-the-difference-between-a-temp-table-and-table-variable-in-sql-server Parallelism

Queries that insert into (or otherwise modify) @table_variables cannot have a parallel plan, #temp_tables are not restricted in this manner.

There is an apparent workaround in that rewriting as follows does allow the SELECT part to take place in parallel but that ends up using a hidden temporary table (behind the scenes)

INSERT INTO @DATA ( ... )
EXEC('SELECT .. FROM ...')

There is no such limitation in queries that select from table variables as illustrated in my answer here
...
Рейтинг: 0 / 0
Insert #Table vs @Table
    #39925118
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексаша,

не используйте табличную переменную,если предполагаете вставить более 100 строк.
...
Рейтинг: 0 / 0
Insert #Table vs @Table
    #39925125
Алексаша
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,

В моем случае даже если запрос ничего не возвращает, вставка в переменную 35 сек против 5.
Вашу рекомендацию понял.
...
Рейтинг: 0 / 0
Insert #Table vs @Table
    #39925146
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексаша

даже если запрос ничего не возвращает, вставка в переменную 35 сек против 5.


Так то не вставка, то ваши "функции" исполняются.
...
Рейтинг: 0 / 0
Insert #Table vs @Table
    #39925219
Алексаша
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

почему мои функции в случае со вставкой во временную табл. быстрее работают? в 7 раз
...
Рейтинг: 0 / 0
Insert #Table vs @Table
    #39925227
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексаша
aleks222,

почему мои функции в случае со вставкой во временную табл. быстрее работают? в 7 раз

ответ в желтых стрелках
...
Рейтинг: 0 / 0
Insert #Table vs @Table
    #39925236
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексаша,

Вам же уже написали, с #-таблицами у вас план запроса использует параллелизм, с @-таблицами параллелизм использоваться не может.

Параллельный план на достаточно большом объеме выборки данных в большинстве случаев работает быстрее последовательного. Поэтому и разница.
...
Рейтинг: 0 / 0
Insert #Table vs @Table
    #39925251
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не люблю @ таблицы
потому что с ними усложняется отладка
допустим есть проблема в коле
именя # , ## таблицы ты стопнулся и видишь данные
а в @ нет

тем не менее есть экзотические случаи когда можно заюзать
как то на собесе меня спросили как вставить запись в лог
если транзакция откаталась
я не допер
а ответ был в @ переменных - на них не действует rollback

ps на текущей работе куча кода с @ переменными
вообщем все работает - так что если все пишется нормально
то и работатет оно также
переписывать вообщем не получится да и не надо.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Insert #Table vs @Table
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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