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


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


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



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



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

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

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

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

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

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


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


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

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

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

Опять же,

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

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

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

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

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

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

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


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

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


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