Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Что лучше по затратам: табличная переменная для трех значений или три переменных?  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
Собственно опишу ситуацию и откуда ноги растут:
Есть 10000 артикулов по 3-7 параметров. То есть около 50000 строк.
Параметры обновляются в цикле - передается артикул и к нему выбираются по критериям нужные параметры. Эта часть не обсуждается.

Предположим на 10000 строк вызывается процедура : sp_applyparams (@artid int);
Внутри неё происходит выборка параметров для artid и обновление/добавление параметров в БД (из внешнего источника).

Так же есть необходимость некоторые параметры обновлять условно-особым образом, и для этого нужно,чтобы их набралось определенное количество (три). Если набралось меньше трех, то обновление не происходит.
Короче, я это сделал посредством табличной переменной, в которую заношу данные о параметре (param_id, param_value, param_type).
Получить должен три строки. Если в ней меньше трех строк, то обновление не происходит.

Потом подумал, почитал... табличные переменные создаются в tempdb (здеся). Это означает, что на каждое из 10000 операций в sp_applyparams (@artid int) табличная переменная будет создаваться и удаляться со всеми сопутствующими блокировками, выделениями и бог знает чем ещё (кстати, интересно узнать подробнее). В условиях того, что база боевая и обрабатывает, с учётом кэширования, около 200 батчей в секунду (реальная нагрузка), то делать подобное через табл переменные впринципе наверное не айс.

Вопрос: действительно ли в этом случае обычных девять int-овых переменных будет лучшим решением? Или переменные тоже как то на диск ложатся или участвую в темпдб?
15 июл 13, 15:01    [14568018]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше по затратам: табличная переменная для трех значений или три переменных?  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
sql 2008

Критерий вопроса: как обычно скорость/нагрузка.
15 июл 13, 15:08    [14568058]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше по затратам: табличная переменная для трех значений или три переменных?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
если 3 - параметр, то вопрос. если константа, то почему бы и не 3 переменных..
накладные расходы при массовой обработке лишними не бывают никогда
15 июл 13, 15:21    [14568174]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше по затратам: табличная переменная для трех значений или три переменных?  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
Crimean
если 3 - параметр, то вопрос. если константа, то почему бы и не 3 переменных..
накладные расходы при массовой обработке лишними не бывают никогда

все девять переменных получат в каждой итерации любое значение. То есть речь не о константах.
15 июл 13, 15:23    [14568197]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше по затратам: табличная переменная для трех значений или три переменных?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
_Промешан_
Вопрос: действительно ли в этом случае обычных девять int-овых переменных будет лучшим решением? Или переменные тоже как то на диск ложатся или участвую в темпдб?
Таблицы нужны для обработки больших наборов данных, если же у вас построчная обработка в цикле (гусары молчать), то переменные конечно будут быстрее.
16 июл 13, 02:54    [14570756]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше по затратам: табличная переменная для трех значений или три переменных?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
ps

в некоторых ситуациях придется уходить на табличку из-за ПК, но это "изюм", но прецеденты были - помогает оптимизатору мозги на место поставить и "стабилизировать" план выполнения. но, повторюсь, "изюм"
16 июл 13, 10:29    [14571494]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше по затратам: табличная переменная для трех значений или три переменных?  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
Mind
_Промешан_
Вопрос: действительно ли в этом случае обычных девять int-овых переменных будет лучшим решением? Или переменные тоже как то на диск ложатся или участвую в темпдб?
Таблицы нужны для обработки больших наборов данных, если же у вас построчная обработка в цикле (гусары молчать), то переменные конечно будут быстрее.
У вас есть какие-то другие варианты решения в соответствии с заданием?
16 июл 13, 12:56    [14572666]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше по затратам: табличная переменная для трех значений или три переменных?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
_Промешан_
Mind
пропущено...
Таблицы нужны для обработки больших наборов данных, если же у вас построчная обработка в цикле (гусары молчать), то переменные конечно будут быстрее.
У вас есть какие-то другие варианты решения в соответствии с заданием?
Избавиться от цикла и делать обновления оперируя наборами данных, а не отдельными строками. Разве это не очевидно?
16 июл 13, 21:30    [14575335]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше по затратам: табличная переменная для трех значений или три переменных?  [new]
_Промешан_
Member

Откуда:
Сообщений: 970
Mind
_Промешан_
пропущено...
У вас есть какие-то другие варианты решения в соответствии с заданием?
Избавиться от цикла и делать обновления оперируя наборами данных, а не отдельными строками. Разве это не очевидно?

Приведете пример?
17 июл 13, 13:48    [14577984]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше по затратам: табличная переменная для трех значений или три переменных?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
_Промешан_
Mind
пропущено...
Избавиться от цикла и делать обновления оперируя наборами данных, а не отдельными строками. Разве это не очевидно?

Приведете пример?
Пример чего? Инструкции INSERT/UPDATE?
17 июл 13, 19:43    [14580108]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить