Следующий отрывок вышел из книги « Высокопроизводительный MySQL, второе издание ».
Это отличная книга, и я рекомендую ее всем.
Краткий ответ:
С вашим размером стола и условиями, независимо от того, какой метод вы выберете, я думаю, что вы потенциально можете долго ждать.
Таблица преобразований
Существует несколько способов преобразования таблицы из одного механизма хранения в другой, каждый из которых имеет свои преимущества и недостатки.
ALTER TABLE
mysql> ALTER TABLE mytable ENGINE = Falcon;
Этот синтаксис работает для всех механизмов хранения, но есть одна загвоздка: это может занять много времени. MySQL будет выполнять построчную копию вашей старой таблицы в новую таблицу. В течение этого времени вы, вероятно, будете использовать всю емкость дискового ввода-вывода сервера, и исходная таблица будет заблокирована для чтения во время выполнения преобразования.
Дамп и импорт
Чтобы получить больше контроля над процессом преобразования, вы можете сначала выбрать дамп таблицы в текстовый файл с помощью утилиты mysqldump. После того, как вы выгрузили таблицу, вы можете просто отредактировать файл дампа, чтобы настроить содержащийся в нем оператор CREATE TABLE. Обязательно измените имя таблицы, а также ее тип, потому что в одной базе данных не может быть двух таблиц с одинаковым именем, даже если они разных типов - и mysqldump по умолчанию записывает команду DROP TABLE перед CREATE TABLE Таким образом, вы можете потерять свои данные, если вы не будете осторожны!
СОЗДАТЬ и ВЫБРАТЬ
Третий метод преобразования - это компромисс между скоростью первого механизма и безопасностью второго. Вместо того чтобы создавать дамп всей таблицы или преобразовывать ее все сразу, создайте новую таблицу и используйте синтаксис MySQL INSERT ... SELECT для ее заполнения следующим образом:
mysql> CREATE TABLE innodb_table LIKE myisam_table;
mysql> ALTER TABLE innodb_table ENGINE=InnoDB;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table;
Это хорошо работает, если у вас мало данных, но если у вас есть, часто более эффективно заполнять таблицу постепенно, фиксируя транзакции между каждым чанком, чтобы журналы отмены не увеличивались в размерах. Предполагая, что id является первичным ключом, выполняйте этот запрос несколько раз (используя большие значения x и y каждый раз), пока вы не скопируете все данные в новую таблицу:
mysql> START TRANSACTION;
mysql> INSERT INTO innodb_table SELECT * FROM myisam_table
-> WHERE id BETWEEN x AND y;
mysql> COMMIT;
После этого у вас останется исходная таблица, которую вы можете удалить, когда закончите с ней, и новая таблица, которая теперь полностью заполнена. Будьте осторожны, чтобы заблокировать исходную таблицу, если это необходимо, чтобы избежать получения несогласованной копии данных!