Самый быстрый способ обновить 120 миллионов записей - PullRequest
44 голосов
/ 14 сентября 2010

Мне нужно инициализировать новое поле со значением -1 в таблице записей 120 миллионов.

Update table
       set int_field = -1;

Я дал ему поработать 5 часов перед отменой.

Я попытался запустить его с установленным уровнем транзакции для чтения незафиксированных с теми же результатами.

Recovery Model = Simple.
MS SQL Server 2005

Какой-нибудь совет, как сделать это быстрее?

Ответы [ 11 ]

0 голосов
/ 14 сентября 2010

В общем, рекомендации следующие:

  1. Удалить или просто отключить все ИНДЕКСЫ, ТРИГГЕРЫ, ОГРАНИЧЕНИЯ на столе;
  2. выполнять COMMIT чаще (например, после каждых 1000 обновленных записей);
  3. Используйте select ... into.

Но в конкретном случае вам следует выбрать наиболее подходящее решение или их комбинацию.

Также имейте в виду, что иногда может быть полезен индекс, например, при выполнении обновления неиндексированного столбца по некоторому условию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...