InnoDB
        以外のテーブルが
        InnoDB
        を使用するように変換を行うには、次のように
        ALTER TABLE
        を使用します。
      
ALTER TABLE t1 ENGINE=InnoDB;
          mysql
          データベース内の MySQL システムテーブル
          (user や
          host など) を
          InnoDB
          型に変換しないでください。これはサポートされていない操作です。システムテーブルは必ず
          MyISAM
          型のものでなければいけません。
        
        InnoDB
        は、MyISAM
        ストレージエンジンがするのと同じように、インデックスを別々に作成するための特別な最適化を行いません。従って、テーブルをエクスポート、インポートしたり、あとでインデックスを作成したりはしません。テーブルを
        InnoDB
        に変換する一番早い方法は、InnoDB
        テーブルに直接挿入することです。それは、ALTER
        TABLE ... ENGINE=INNODB
        を利用する、または同一定義を利用して空の
        InnoDB
        テーブルを作成し、INSERT INTO
        ... SELECT * FROM ...
        を利用して行を挿入するということです。
      
        もし 2 番目のキー上に
        UNIQUE
        制限があったら、インポート操作の最中に一時的に一意性確認を切り、テーブルインポートのスピードを上げることができます:
      
SET unique_checks=0;
... import operation ...
SET unique_checks=1;
        大きいテーブルに対しては、InnoDB
        が二次インデックスレコードをバッチとして書くためにそれ自身の挿入バッファーを利用することができるので、この作業をするとディスク
        I/O
        を大幅に節約することができます。データが重複キーを含んでいないことを必ず確認してください。unique_checks
        はストレージエンジンが重複キーを無視することを許可しますが、それを要求はしません。
      
挿入の操作性をあげるためには、大きいテーブルを細かく分けて挿入するのが良いでしょう:
INSERT INTO newtable SELECT * FROM oldtable WHERE yourkey > something AND yourkey <= somethingelse;
すべてのレコードが挿入されたあとで、テーブルをリネームすることができます。
        大きいテーブルの変換の最中に、ディスク I/O
        を減らすために InnoDB
        バッファープールのサイズを増やす必要があります。しかし、物質的メモリーの
        80%
        以上は利用しないでください。InnoDB
        ログファイルのサイズを増やすこともできます。
      
        テーブル領域を一杯にしないように注意してください:InnoDB
        テーブルは MyISAM
        テーブルよりも多くのディスク領域を必要とします。もし
        ALTER TABLE
        操作で領域を使い切ってしまうと、それはロールバックを始め、それがディスクに頼っている場合何時間も時間がかかります。挿入には、InnoDB
        はバッチ内のインデックスに 2
        つめのインデックスレコードをマージするために挿入バッファーを利用します。それにより多くのディスク入出力が削減されます。ロールバックではそのような機構は使用されないため、ロールバックは挿入よりも
        30 倍長くかかる可能性があります。
      
        ロールバックが暴走した場合は、データベースに貴重なデータがなければ、膨大なディスク
        I/O
        の完了を待つよりも、データベースプロセスを強制終了したほうが良いでしょう完全な手順に関しては、項9.6.2. 「InnoDB 復旧の強制」
        を参照してください。
      
        (システムテーブル以外の) すべてのテーブルを
        InnoDB
        テーブルとして作成するには、サーバーオプションファイルの
        [mysqld] セクションに
        default-storage-engine=innodb
        という行を追加します。
      

