OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE
    tbl_name [, tbl_name] ...
          もしテーブルの大部分を削除したり、変数長行で何箇所もテーブルを変更した場合は
          (VARCHAR、VARBINARY、BLOB、または
          TEXT
          カラムを持つテーブル)、OPTIMIZE
          TABLE
          を利用しなければいけません。削除された行はリンクされたリスト内で保存され、後続の
          INSERT
          操作は古い行の位置を再利用します。使用されていないスペースの再要求をし、データファイルをデフラグするには
          OPTIMIZE TABLE
          を利用することができます。
        
          このステートメントはテーブルに
          SELECT と
          INSERT
          権限を要求します。
        
          MySQL 5.1.27
          からは、OPTIMIZE
          TABLE
          はパーティション化されたテーブルに対してもサポートされています。また、MySQL
          5.1.27 からは、ALTER TABLE ...
          OPTIMIZE PARTITION を使用して 1
          つ以上のパーティションを最適化することもできます。詳細については、項8.1.7. 「ALTER TABLE 構文」
          および Maintenance of Partitions
          を参照してください。
        
          ほとんどの設定で、OPTIMIZE
          TABLE
          を利用する必要はまったくありません。可変長行の更新を頻繁にするとしても、特定のテーブルに対してだけ、この作業を週に一度、または月に一度以上する必要はありません。
        
          OPTIMIZE TABLE
          は、MyISAM、InnoDB、および
          ARCHIVE
          テーブルに対してのみ機能します。ほかの任意のストレージエンジンを使用して作成されたテーブル
          (NDBCLUSTER
          ディスクデータテーブルを含む)
          に対しては機能しません。
        
          MySQL Cluster NDB 6.3.7
          からは、OPTIMIZE
          TABLE はインメモリー
          NDBCLUSTER
          テーブルの動的カラムに対してサポートされています。Cluster
          テーブル上の OPTIMIZE
          のパフォーマンスは、OPTIMIZE
          TABLE
          によって行のバッチの処理間で待機するミリ秒数を制御する
          ndb_optimization_delay
          システム変数の値を調整することによって調整できます。詳細については、Previous MySQL Cluster Issues Resolved in MySQL 5.1, MySQL Cluster NDB  6.x, and MySQL Cluster NDB 7.x
          を参照してください。
        
          MySQL Cluster NDB 6.3.8
          からは、たとえば、OPTIMIZE
          操作を実行している SQL
          スレッドを強制終了することによって
          OPTIMIZE TABLE
          を中断できます。
        
          MyISAM
          テーブルに対しては、OPTIMIZE
          TABLE は次のように機能します。
        
もしテーブルが行を削除したり分割したりすると、テーブルを修復します。
もしインデックスページがソートされていなければ、それらをソートします。
もしテーブルの統計が最新でなければ、(そしてインデックスをソートすることで修復が完了されなければ) それらを更新します。
          InnoDB
          テーブルに対しては、インデックス統計とクラスタインデックス内の使用されていないフリースペースを更新するためにテーブルを復元する
          ALTER TABLE に
          OPTIMIZE TABLE
          がマップされます。MySQL 5.1.27
          からは、次に示すように、これは
          InnoDB テーブル上で
          OPTIMIZE TABLE
          を実行するときにその出力に表示されます。
        
mysql> OPTIMIZE TABLE foo; +----------+----------+----------+-------------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +----------+----------+----------+-------------------------------------------------------------------+ | test.foo | optimize | note | Table does not support optimize, doing recreate + analyze instead | | test.foo | optimize | status | OK | +----------+----------+----------+-------------------------------------------------------------------+
          --skip-new か
          --safe-mode
          オプションを利用して
          mysqld
          をスタートさせることで、OPTIMIZE
          TABLE
          が別のストレージエンジン上で機能させることができます。この場合、OPTIMIZE
          TABLE は単に
          ALTER TABLE
          にマップされます。
        
          OPTIMIZE TABLE
          は、次のカラムを含む結果セットを返します。
        
| カラム | 値 | 
| テーブル | テーブル名 | 
| Op | いつも optimize | 
| Msg_type | status、error、info、またはwarning | 
| Msg_text | 情報メッセージ | 
          MySQL は OPTIMIZE
          TABLE
          が起動している最中にテーブルをロックするということに注意してください。
        
          デフォルトでは、OPTIMIZE
          TABLE
          ステートメントはレプリケーションスレーブに複製されるように、バイナリログに書き込まれます。ロギングは、オプションの
          NO_WRITE_TO_BINLOG
          キーワードまたはそのエイリアス
          LOCAL
          を使用して抑制できます。
        
          OPTIMIZE TABLE
          は、POINT
          カラム上の空間インデックスのような、R-tree
          インデックスをソートしません。(Bug#23578)
        

