Выполнение запроса на смену типа поля, когда в базе 26 млн записей

Рейтинг: 0Ответов: 1Опубликовано: 01.12.2014

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

ALTER TABLE `tasks_done` CHANGE `type` `type`TINYINT(1) NOT NULL

Ответы

▲ 3Принят

По частям можно, но это будет значительно дольше, так как изменить тип по частям в пределах одной таблицы нельзя.

Создаете новую таблицу с правильными полями(и типами полей), называете ее tasks_done_new.
Копируете в нее блоками по 50 тыс строк(юзайте limit). информацию из основной таблицы. Это и есть разбиение.
Удаляете основную таблицу(drop).
Переименовываете tasks_done_new в tasks_done.
Готово.

Рассчетное время простоя системы равно времени удаления старой tasks_done.

UPDATE:
Возможно, будет быстрее добавить новую колонку в старую таблицу, а потом удалить старую колонку и переименовать только что созданную.
Плюсы:

  • пожалеете винчестер.

Минусы:

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