Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Bulk update the fastest way  [new]
bulkupdate01
Guest
Коллеги, подскажите пожалуйста самый быстрый способ массового изменения записей в таблице.

Запрос такого характера:
update 
set 
    val = b.val
from dbo.a 
inner join dbo.b on b.id = a.b_id



Будет ли быстрее выгрузка в файл и затем bulk insert в таблицу dbo.a?
7 сен 15, 12:00    [18117758]     Ответить | Цитировать Сообщить модератору
 Re: Bulk update the fastest way  [new]
Glory
Member

Откуда:
Сообщений: 104751
bulkupdate01
и затем bulk insert в таблицу dbo.a?

А как bulk insert изменит записи то в таблице ?
7 сен 15, 12:03    [18117770]     Ответить | Цитировать Сообщить модератору
 Re: Bulk update the fastest way  [new]
bulkupdate01
Guest
Glory,

Я имел в виду:
1. Выгружаем в файл результат запроса
select a.id, a.b_id, b.val from a left join b on b.id = a.b_id

2. Очищаем таблицу dbo.a: truncate table dbo.a
3. Осуществляем bulk insert из файла из п.1
7 сен 15, 12:11    [18117835]     Ответить | Цитировать Сообщить модератору
 Re: Bulk update the fastest way  [new]
Glory
Member

Откуда:
Сообщений: 104751
bulkupdate01
Glory,

Я имел в виду:
1. Выгружаем в файл результат запроса
select a.id, a.b_id, b.val from a left join b on b.id = a.b_id


2. Очищаем таблицу dbo.a: truncate table dbo.a
3. Осуществляем bulk insert из файла из п.1

1. Результат будет отличаться от результата
update
set
val = b.val
from dbo.a
inner join dbo.b on b.id = a.b_id

2. Время выполнения будет больше
7 сен 15, 12:21    [18117889]     Ответить | Цитировать Сообщить модератору
 Re: Bulk update the fastest way  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9159
Для максимальной скорости длина размер обновляемого поля, по идее, не должна быть меньше длины значения. Если не так, то будут старые записи помечены как неиспользуемые и добавлены новые в таблицу по всем правилам добавления (с разбиением страниц и прочее). Т.е. для интенсивных обновлений я бы закладывал CHAR , но не VARCHAR.
Однако, это моя теория.
7 сен 15, 12:25    [18117916]     Ответить | Цитировать Сообщить модератору
 Re: Bulk update the fastest way  [new]
bulkupdate01
Guest
Glory, согласен.


А какие еще могут быть варианты быстрого обновления столбца для всей таблицы в 500 млн. строк?

Будет ли наилучшим вариант:
1. Создание клона таблицы с кластерным ключем
2. Переливка данных с учетом изменений поля val
3. Переименование клона таблицы и создание на ней некластерных ключей, ограничений как в целевой

Будет это быстрее прямого update-а таблицы?
7 сен 15, 12:29    [18117947]     Ответить | Цитировать Сообщить модератору
 Re: Bulk update the fastest way  [new]
Glory
Member

Откуда:
Сообщений: 104751
bulkupdate01
А какие еще могут быть варианты быстрого обновления столбца для всей таблицы в 500 млн. строк?

А быстро - это сколько в граммах ?
7 сен 15, 12:30    [18117950]     Ответить | Цитировать Сообщить модератору
 Re: Bulk update the fastest way  [new]
bulkupdate01
Guest
Glory,

это наиболее быстрое обновление таблицы 500 млн. записей.
7 сен 15, 12:33    [18117975]     Ответить | Цитировать Сообщить модератору
 Re: Bulk update the fastest way  [new]
Glory
Member

Откуда:
Сообщений: 104751
bulkupdate01
это наиболее быстрое обновление таблицы 500 млн. записей.

Т.е. вы измерили свой update и результаты вам не понравились ?
7 сен 15, 12:35    [18117997]     Ответить | Цитировать Сообщить модератору
 Re: Bulk update the fastest way  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9159
bulkupdate01
Glory, согласен.

А какие еще могут быть варианты быстрого обновления столбца для всей таблицы в 500 млн. строк?


Самый быстрый способ обновления - это вставка в двухколоночную таблицу с предварительным truncate и превращение исходной таблицы в представление.
7 сен 15, 12:39    [18118017]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить