Ответ 1
Я не могу дать вам удар по духу (запрос функции # 34354 поможет, за исключением того, что он, вероятно, не будет вернуться к MySQL 5.0), но дополнительное время связано с тем, что ALTER ... CHANGE
может изменить тип столбца (и атрибуты столбца, если таковые имеются), что требует преобразования значений, хранящихся в столбце и других чеки. MySQL 5.0 не включает оптимизацию, когда новый тип и атрибуты такие же, как и старые. Из документации для ALTER
в MySQL 5.0:
В большинстве случаев ALTER TABLE работает, создавая временную копию исходной таблицы. Изменение выполняется на копии, а затем исходная таблица удаляется, а новая - переименовывается. Пока выполняется ALTER TABLE, исходная таблица может быть прочитана другими сеансами. Обновления и записи в таблицу останавливаются до тех пор, пока новая таблица не будет готова, а затем автоматически перенаправляются в новую таблицу без каких-либо неудачных обновлений.
[...]
Если вы используете любую альтернативу ALTER TABLE, отличную от RENAME, MySQL всегда создает временную таблицу, даже если данные не обязательно должны быть скопированы (например, когда вы меняете имя столбца).
В разделе 5.1 ALTER
есть некоторые дополнительные оптимизации:
В некоторых случаях временная таблица не нужна:
Изменения, которые изменяют только метаданные таблицы, а не данные таблицы, могут быть сделаны немедленно, изменяя файл таблицы .frm и не касаясь содержимого таблицы. Следующие изменения - это быстрые изменения, которые могут быть сделаны следующим образом:
- Переименование столбца , за исключением механизма хранения InnoDB.
[...]