Наступна робота вийшла з книги " Високопродуктивний MySQL, друге видання ".
Це відмінна книга, і я рекомендував би її будь-кому.
Коротка відповідь:
З огляду на розмір та умови вашого столу, незалежно від того, який метод ви виберете, я думаю, що ви потенційно можете довго чекати.
Перетворення таблиці
Існує кілька способів перетворення таблиці з одного двигуна зберігання в інший, кожен з яких має переваги та недоліки.
АЛЬТЕР ТАБЛИЦЯ
mysql> ALTER TABLE mytable ENGINE = Falcon;
Цей синтаксис працює для всіх механізмів зберігання даних, але є улов: це може зайняти багато часу. MySQL виконає по черзі копію вашої старої таблиці в нову таблицю. За цей час, ймовірно, ви будете використовувати всю ємність вводу / виводу диска сервера, і початкова таблиця буде зачитана під час читання конверсії.
Звалити та імпортувати
Щоб отримати більше контролю над процесом перетворення, ви можете спершу скинути таблицю в текстовий файл за допомогою утиліти mysqldump. Після того, як ви скинули таблицю, ви можете просто відредагувати файл дампа, щоб скорегувати вираз CREATE TABLE, який він містить. Не забудьте змінити назву таблиці, а також її тип, тому що у вас не може бути двох таблиць з тим самим іменем в одній базі даних, навіть якщо вони різного типу - і mysqldump за замовчуванням для написання команди DROP TABLE перед CREATE TABLE , тож ви можете втратити свої дані, якщо не будете обережні!
СТВОРИТИ І ВИБІРИ
Третя техніка перетворення - це компроміс між швидкістю першого механізму та безпекою другого. Замість того, щоб скидати всю таблицю або перетворювати її все одночасно, створіть нову таблицю та використовуйте синтаксис INSERT ... SELECT MySQL для її заповнення таким чином:
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;
Після цього вам залишиться оригінальна таблиця, яку ви можете скинути, коли закінчите з нею, та нова таблиця, яка зараз повністю заповнена. Будьте обережні, щоб заблокувати оригінальну таблицю, якщо потрібно, щоб не отримати непослідовну копію даних!