OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name[,tbl_name]...
OPTIMIZE TABLE
は、テーブルの大部分を削除したり、可変長レコードを持つテーブル(VARCHAR
カラム、BLOB
カラム、または
TEXT
カラムを持つテーブル)に多くの変更を加えた場合に使用します。
削除されたレコードはリンクされたリストに保持され、元のレコード位置は、後続の
INSERT
操作により再利用されます。OPTIMIZE
TABLE
を使用して未使用領域を解放し、データファイルを最適化することができます。
ほとんどの場合、OPTIMIZE TABLE
を実行する必要はありません。可変長レコードに更新を多く行う場合でも、週または月に一度、特定のテーブルだけに実行するだけで十分です。
現在のところ、OPTIMIZE TABLE
は
MyISAM
テーブル、 BDB
およびInnoDB
テーブルにのみ有効です。BDB
テーブルでは、OPTIMIZE TABLE
は現在
ANALYZE TABLE
にマップされます。 See
項4.6.2. 「ANALYZE TABLE
構文」。
mysqld
を --skip-new
または --safe-mode
で起動することにより、OPTIMIZE
TABLE
を他のテーブルタイプにでも使用できるようになります。しかしこの場合、OPTIMIZE
TABLE
は ALTER TABLE
にマップされます。
OPTIMIZE TABLE
は以下のように動作します。
テーブルに削除されたレコードまたは分割されたレコードがある場合、テーブルを修復する。
インデックスページがソートされていない場合、ソートする。
統計が最新でなければ(およびインデックスのソートによる修復ができなかった場合)統計を更新する。
注意: OPTIMIZE TABLE
の実行中、テーブルはロックされます。
MySQL 4.1.1
より前のバージョンを使用している場合、OPTIMIZE
コマンドはバイナリログに記録されません。MySQL
4.1.1 以降を使用している場合は、オプションの
NO_WRITE_TO_BINLOG
キーワード(またはそのエイリアスの
LOCAL
)を使用していない限り、バイナリログに記録されます。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.