powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / О производительности
5 сообщений из 5, страница 1 из 1
О производительности
    #32009317
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!!!
Озадачился, что оставить
это
if update(tablename) begin
declare @newcode varchar(100), @id int
declare @temp table (id int identity, code varchar(20))
insert into @temp select code from inserted where code in ('code_1', 'code_2', 'code_3', 'code_4', 'code_5')
while exists(select top 1 * from @temp) begin
select top 1 @id = id, @newcode = code from @temp
delete from @temp where id = @id
exec('update shtat set ' + @newcode + ' = null where id is not null')
end
end
или это
if update(tablename) begin
declare @newcode varchar(100)
declare cur cursor local fast_forward
for select code from inserted where code in ('code_1', 'code_2', 'code_3', 'code_4', 'code_5')
open cur
fetch next from cur into @newcode
exec('update shtat set ' + @newcode + ' = null where id is not null')
while @@fetch_status = 0 begin
fetch next from cur into @newcode
exec('update shtat set ' + @newcode + ' = null where id is not null')
end
close cur
deallocate cur
end
QA показывает примерно одинаковое время, ну может в среднем лучше первый вариант. Посоветуйте плз.
...
Рейтинг: 0 / 0
О производительности
    #32009391
Фотография Дед Маздай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если рассматривать Вашу задачу отвлеченно, не зная окружающего кода и перспектив развития, то варианты действительно эквивалентны. На тех объемах данных, для которых имеет смысл использовать таблицы-переменные, курсоры тоже не показывают заметных тормозов. Лично мне кажется более изящным первый вариант, хотя в данных условиях это чисто качественная оценка.
...
Рейтинг: 0 / 0
О производительности
    #32009393
Slava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Дед Мазай за мнение.
Только я не понял про таблицы-переменные. Вот почему. В ВОL сказано, что курсор это удар по производительности. Про таблицы-переменные я этого не читал нигде. Да и вряд ли прочту потому как доступ к данным в оперативной памяти (к таблицам-переменным) гораздо быстрее чем доступ к данным на диске. Поясните пожалуйста, что Вы имеете в виду
...
Рейтинг: 0 / 0
О производительности
    #32009399
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное проще всего написать так:
update shtat set
code_1 = null,
code_2 = null,
code_3 = null,
code_4 = null,
code_5 = null
where id is not null



Я конечно понимаю, что на самом деле запрос сложнее. Но на мой взгляд это ненормально когда для доступа к полям таблицы Вы используете еще одну таблицу. Сделайте тогда таблицу shtat с двумя ключевыми полями (id и code_id) и одним полем данных. Тогда запрос будет еще проще:
update shtat set
code = null
where id is not null

Или так нравиться циклы писать?

А Дед Маздай имел ввиду что для 5-ти записей всё равно как писать - оба варианта выполнятся мгновенно.
...
Рейтинг: 0 / 0
О производительности
    #32009492
Фотография Дед Маздай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел в виду не производительность, а то, что в локальную переменную много записей не засунешь. Хотя, конечно, все зависит от объема памяти.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / О производительности
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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