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

Откуда: From Russia
Сообщений: 146
Всем привет,
Есть задача обновить N полей в таблицах при условии, что поле is not null. В обновляемое поле нужно записывать порядковый номер записи в таблицы.
Для одного поля сделал так:
update m
set m.Name = 'Customer Name ' + CAST(m.seq as nvarchar(255))
from (select ROW_NUMBER() over(order by ID) as seq, * from Customer) m
where m.Name is not null

И так для каждого поля:
update m
set m.Address = 'Some address ' + CAST(m.seq as nvarchar(255))
from (select ROW_NUMBER() over(order by ID) as seq, * from Customer) m
where m.Address is not null

Всего полей 3-8 для разных таблиц. Есть жесткое ограничение по времени выполнения скрипта.
Подскажите, можно ли как-то соптимизить это дело?
29 май 12, 09:11    [12629448]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса на апдейт всех записей  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Kudep,

update m
set m.Name = 'Customer Name ' + CAST(m.seq as nvarchar(255))
from (select ROW_NUMBER() over(order by ID) as seq, Name from Customer where Name is not null) as m


И кстати, если можно сделать, так, то это будет еще быстрее
update m
set m.Name = 'Customer Name ' + CAST(ID as nvarchar(255))
from  Customer  m where m.Name is not null
29 май 12, 09:21    [12629492]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса на апдейт всех записей  [new]
step_ks
Member

Откуда:
Сообщений: 936
если без where время устраивает, то можно попробовать сделать один апдейт
update m
set Name    = case when m.Name is not null    then 'Customer Name ' + CAST(m.seq as nvarchar(255)) else  m.Name end
    Address = case when m.Address is not null then 'Some address ' + CAST(m.seq as nvarchar(255))  else  m.Address end
from (select ROW_NUMBER() over(order by ID) as seq, * from Customer) m
29 май 12, 09:24    [12629506]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса на апдейт всех записей  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
Kudep,
автор
is not null.
точно? может все же is null
если порядок для row_number одинаковый,то что мешает делать update сразу нескольких полей(динамически формировать запрос)?
Можно подумать о том не проще ли его сразу включить в таблицу порядковый номер строки(посчитать и поддерживать).
Если записей по заданному условию много,то что бы лог не пухнул, обновляйте по частям.
29 май 12, 09:24    [12629508]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса на апдейт всех записей  [new]
step_ks
Member

Откуда:
Сообщений: 936
Мистер Хенки
Kudep,

update m
set m.Name = 'Customer Name ' + CAST(m.seq as nvarchar(255))
from (select ROW_NUMBER() over(order by ID) as seq, Name from Customer where Name is not null) as m


врядли это будет отличаться от апдейта автора
29 май 12, 09:27    [12629525]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса на апдейт всех записей  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
step_ks
Мистер Хенки
Kudep,

update m
set m.Name = 'Customer Name ' + CAST(m.seq as nvarchar(255))
from (select ROW_NUMBER() over(order by ID) as seq, Name from Customer where Name is not null) as m


врядли это будет отличаться от апдейта автора

ну как бы в первом случае нумеруется все множество, во втором только Name is not null
29 май 12, 09:30    [12629550]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса на апдейт всех записей  [new]
step_ks
Member

Откуда:
Сообщений: 936
Kudep
Всего полей 3-8 для разных таблиц. Есть жесткое ограничение по времени выполнения скрипта.
Подскажите, можно ли как-то соптимизить это дело?

а вообще, для начала расскажите сколько работают ваши апдейты и сколько бы, чтобы работали + планы и структуры.
29 май 12, 09:30    [12629551]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса на апдейт всех записей  [new]
step_ks
Member

Откуда:
Сообщений: 936
step_ks
а вообще, для начала расскажите сколько работают ваши апдейты и сколько бы надо, чтобы работали + планы и структуры.
29 май 12, 09:32    [12629564]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса на апдейт всех записей  [new]
step_ks
Member

Откуда:
Сообщений: 936
Мистер Хенки
step_ks
пропущено...

врядли это будет отличаться от апдейта автора

ну как бы в первом случае нумеруется все множество, во втором только Name is not null

а, да, ваша правда.
29 май 12, 09:37    [12629606]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса на апдейт всех записей  [new]
Crimean
Member

Откуда:
Сообщений: 13147
а данные относительно статичны? если да - заготовить рядом таблицы пока данные статичны и в момент "Х" - тупо сренеймить. будет самый быстрый по скорости "замены" вариант. но стремноватый из-за требования статичности данных на время подготовки
я к тому, что собственно массовый расчет + массовое обновление ничем особо не ускорить. а значит это можно размазать по времени
29 май 12, 09:41    [12629634]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить