Почему требуется переименование столбца в mysql?

У меня есть таблица размером 12 ГБ, полная изображений, я пытаюсь переименовать столбец blob, который хранит данные, и он берет навсегда. Может ли кто-нибудь дать мне удар от удара, почему он так долго переименовывает колонку? Я бы подумал, что эта операция будет довольно быстрой, независимо от размера таблицы?

EDIT: запрос, который я выполнил, выглядит следующим образом

 alter table `rails_production`.`pictures` change `data` `image_file_data` mediumblob NULL

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

Он находится в списке вещей, чтобы сделать, чтобы изменить хранилище изображений из базы данных в файловую систему.

EDIT2: версия сервера Mysql: 5.0.51a-24 + lenny2 (Debian)

Ответы

Ответ 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.

[...]

Ответ 2

Поскольку MySQL будет перестраивать всю таблицу при изменении схемы.

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

Ответ 3

Да mysql выполняет временную копию таблицы. Я не думаю, что там есть простой способ. Вы действительно должны думать о том, чтобы хранить изображения в файловой системе и хранить только пути в mysql. Это единственный способ закрепить его, я думаю.