powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / временная таблица или табличная переменная, что предпочтительнее
18 сообщений из 18, страница 1 из 1
временная таблица или табличная переменная, что предпочтительнее
    #39821226
rtv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rtv
Гость
Подскажите, пожалуйста, есть ли значимые предпочтения между сбором результата промежуточного select во временную таблицу или в табличную переменную? Если безотносительно зоны видимости и времени существования, то есть без учёта этих факторов ...
Код: sql
1.
select (что-то откуда-то как-то) into #temptable


или
Код: sql
1.
select (что-то откуда-то как-то) as temptable


Как лучше?
Или очень ли плохо собирать именно во временную таблицу, хотя использоваться она будет локально в одном скрипте, а по его завершению удаляться? Мне "организационно" удобнее использовать временные таблицы, но если так "невынужденно" дёргать диск это совсем-совсем плохо, то переделаю
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821232
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rtvПодскажите, пожалуйста, есть ли значимые предпочтения между сбором результата промежуточного select во временную таблицу или в табличную переменную? Если безотносительно зоны видимости и времени существования, то есть без учёта этих факторов ...
Код: sql
1.
select (что-то откуда-то как-то) into #temptable



или
Код: sql
1.
select (что-то откуда-то как-то) as temptable



Как лучше?
Или очень ли плохо собирать именно во временную таблицу, хотя использоваться она будет локально в одном скрипте, а по его завершению удаляться? Мне "организационно" удобнее использовать временные таблицы, но если так "невынужденно" дёргать диск это совсем-совсем плохо, то переделаю

А что, из вами приведенного, является "табличной переменной"? Уж не "as" ли?
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821243
rtv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rtv
Гость
msLexА что, из вами приведенного, является "табличной переменной"? Уж не "as" ли?

Ага, оно - "as" ли :)) Но Вы же догадались о чём я? Не знаю, что это и как называется. Плохо, понимаю. Показалось похоже на переменную, и что "оно" in memory.

Но это не снимает вопрос, а усиливает, подчёркивая уровень вопрошающего.
Чем бы оно ни было, это "as" ли :)) - мне к нему повторно обращаться не нужно. (Хотя если кто-нибудь скажет, что это, будет полезно)
Так вот когда к временной выборке повторно обращаться не нужно, она сразу после отработки скрипта будет удаляться, будет ли при этом сильно плохо использовать select into? Или это ни для чего особо не критично?
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821245
rtv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rtv
Гость
просто именованная выборка?
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821248
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rtv,

В первом случае вы вставляете данные (набор данных) во временную таблицу, во втором вы ничего кроме переименования одной колонки не делаете
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821249
rtv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rtv
Гость
PizzaPizzartv,

В первом случае вы вставляете данные (набор данных) во временную таблицу, во втором вы ничего кроме переименования одной колонки не делаете
Да, только не колонки, а выборки.
И вот вопрос в том, очень ли плохо использовать временные таблицы, в случае когда можно обойтись и без них, а временные таблицы просто удобнее при организации внешнего программного кода.
И конкретно - у меня сейчас в запросе используется условно такая конструкция
Код: sql
1.
2.
3.
select * from 
(select что-то откуда-то как-то) as tt 
where ещё условия


По ряду внешних соображений хочется это переписать с использованием временной таблицы. Переписать можно, но вдруг такое решение будет очевидно хуже по каким-то неизвестным мне соображениям, может заведомо медленнее, может зря диск дёргать плохо, еще чего-то...
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821250
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rtvДа, только не колонки, а выборки.
as = это алиасинг
В блоке SELECT это алиасинг для колон ки
В блоке FROM для выборки


rtvочень ли плохо использовать временные таблицы
Любые вещи нужно использовать по назначению, т.е. если они нужны. Зачем вам временная таблица?

Если вам просто хочется это переписать без цели использования функционала, который предоставляют временные таблицы, то это конечно будет очевидно хуже просто потому, что вы увеличиваете нагрузку на сервер "просто так" и, по видимому, не очень понимаете что делаете и зачем.

Достаточно посмотреть на план выполнения запросов и статистику и сразу увидите разницу, которую надо (обычно причинами помимо "хочется переписать") обосновать.
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821252
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rtv,

Опять же,

select into выполняет эту конкретную операцию
select выдает вам результирующую выборку

это две совершенно разные задачи и вы спрашиваете какая из них "лучше"...
Если вам надо таки получить выборку, то вам придется делать select в дополнение к select into.
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821286
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rtv,

табличная переменная - это не то, о чем Вы думаете. Выбор того или иного решения зависит от его эффективности. Эффективность проверяется практическим опытом. В вашем случае оба решения равноправны и зависят от конкретной ситуации.
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821293
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rtv,

Это называется "derived table" и никакого отношения к временным таблицам или переменным не имеет. Временная таблица или табличная переменная - это вполне реаьная материальная таблица в tempdb, а derived table это просто синтаксическая конструкция в запросе - никаких физических таблиц, как и при использовании CTE, при её использовании не создается. Если есть возможность использовать derived table или CTE, то надо использовать их, т.к. это даст больше простора оптимизатору поработать над твоим запросом.
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821306
rtv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rtv
Гость
fkthatrtv,
Это называется "derived table" и никакого отношения к временным таблицам или переменным не имеет. Временная таблица или табличная переменная - это вполне реаьная материальная таблица в tempdb, а derived table это просто синтаксическая конструкция в запросе - никаких физических таблиц, как и при использовании CTE, при её использовании не создается. fkthat, Спасибо!

PizzaPizzaЛюбые вещи нужно использовать по назначению, т.е. если они нужны. Зачем вам временная таблица?
fkthatrtv,
Если есть возможность использовать derived table или CTE, то надо использовать их, т.к. это даст больше простора оптимизатору поработать над твоим запросом.
В большом select используется некая промежуточная выборка, организованная как "derived table".
Сейчас нужно, по условиям использовать в этом месте разные выборки. Вроде как напрашивается введение переменной. С точки зрения моего внешнего кода (Delphi) именно так было бы правильно. И вот встал вопрос, насколько это будет хуже относительно уже кода sql. Ну по итогам обсуждения "моё подозрение" подтвердилось - нагрузку на сервер "просто так" - это плохо, у оптимизатора будет меньше свободы, тоже плохо.
А поскольку я пишу в Delphi мне не надо будет усложнять запрос ещё и этим условием на разные выборки. Я без проблем динамически сформирую разные запросы по каждому условию для этих промежуточных выборок. Временные таблицы всего лишь повысили бы мне читабельность моего дельфийского кода, но это не аргумент.
Всем спасибо!
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821351
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatа derived table это просто синтаксическая конструкция в запросе - никаких физических таблиц, как и при использовании CTEНу как сказать... Сервер использует tempdb и в этих случаях при необходимости.
Может, таблицей это и назовёшь...
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821353
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rtvВ большом select используется некая промежуточная выборка, организованная как "derived table".
Сейчас нужно, по условиям использовать в этом месте разные выборки. Вроде как напрашивается введение переменной. С точки зрения моего внешнего кода (Delphi) именно так было бы правильно. И вот встал вопрос, насколько это будет хуже относительно уже кода sql. Ну по итогам обсуждения "моё подозрение" подтвердилось - нагрузку на сервер "просто так" - это плохо, у оптимизатора будет меньше свободы, тоже плохо.Бывает по разному, нужно принимать решение, смотря на конкретную ситуацию.

Чаще всего не имеет смысла "материализовать" подзапрос, с помощью предварительной выборки во временную таблицу.

Но иногда, если подзапрос выбирает данные по сложным условиям, и в результате выбирает не особенно много данных, а потом из этой выборки джелается много других выборок, так будет эффективнее.
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821354
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rtv Временные таблицы всего лишь повысили бы мне читабельность моего дельфийского кода, но это не аргумент.


Читаемость кода это СТЕ. Прочитайте про них. Они никак не влияют на фактическое выполнение запроса, а только на его отображение - на текст.
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821370
rtv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rtv
Гость
alexeyvgЧаще всего не имеет смысла "материализовать" подзапрос, с помощью предварительной выборки во временную таблицу.
Но иногда, если подзапрос выбирает данные по сложным условиям, и в результате выбирает не особенно много данных, а потом из этой выборки делается много других выборок, так будет эффективнее.
Да, вот последнее очень похоже на мой случай...

PizzaPizzartv Временные таблицы всего лишь повысили бы мне читабельность моего дельфийского кода, но это не аргумент.
Читаемость кода это СТЕ. Прочитайте про них. Они никак не влияют на фактическое выполнение запроса, а только на его отображение - на текст.
Спасибо. Читаю. Полезно.
Но я то про другое вообще, про дельфийский код, который к этому разделу отношения не имеет.
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821512
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rtv,
в вашем случае читаемость повысила бы "инкапсуляция" кода SQL в процедуру и ее вызов из программы на Delphi.
А в самой процедуре уже хоть временные таблицы, хоть табличные переменные, хоть табличные функции.
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821676
rtv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rtv
Гость
Руслан Дамировичrtv,
в вашем случае читаемость повысила бы "инкапсуляция" кода SQL в процедуру и ее вызов из программы на Delphi.
А в самой процедуре уже хоть временные таблицы, хоть табличные переменные, хоть табличные функции. Процедуру на сервере? Нет, это не "наш случай", к сожалению. У нас код правится постоянно (сверху поступают новые регламенты в режиме потока сознания), такая жизнь ;). А оперативность внесения изменений в приложение выше, чем на сервер.
...
Рейтинг: 0 / 0
временная таблица или табличная переменная, что предпочтительнее
    #39821893
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rtvА оперативность внесения изменений в приложение выше, чем на сервер.Странно.
Обычно главный (да что там, часто едиенственный) мотив переноса запросов в хранимые процедуры - скорость и простота внесения изменений.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / временная таблица или табличная переменная, что предпочтительнее
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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