Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А как bulk insert изменит записи то в таблице ? |
||
7 сен 15, 12:03 [18117770] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
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] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
Для максимальной скорости длина размер обновляемого поля, по идее, не должна быть меньше длины значения. Если не так, то будут старые записи помечены как неиспользуемые и добавлены новые в таблицу по всем правилам добавления (с разбиением страниц и прочее). Т.е. для интенсивных обновлений я бы закладывал CHAR , но не VARCHAR. Однако, это моя теория. |
7 сен 15, 12:25 [18117916] Ответить | Цитировать Сообщить модератору |
bulkupdate01
Guest |
Glory, согласен. А какие еще могут быть варианты быстрого обновления столбца для всей таблицы в 500 млн. строк? Будет ли наилучшим вариант: 1. Создание клона таблицы с кластерным ключем 2. Переливка данных с учетом изменений поля val 3. Переименование клона таблицы и создание на ней некластерных ключей, ограничений как в целевой Будет это быстрее прямого update-а таблицы? |
7 сен 15, 12:29 [18117947] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А быстро - это сколько в граммах ? |
||
7 сен 15, 12:30 [18117950] Ответить | Цитировать Сообщить модератору |
bulkupdate01
Guest |
Glory, это наиболее быстрое обновление таблицы 500 млн. записей. |
7 сен 15, 12:33 [18117975] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Т.е. вы измерили свой update и результаты вам не понравились ? |
||
7 сен 15, 12:35 [18117997] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
Самый быстрый способ обновления - это вставка в двухколоночную таблицу с предварительным truncate и превращение исходной таблицы в представление. |
||
7 сен 15, 12:39 [18118017] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |