私はMySQL 5.5に取り組んでおり、OPTIMIZE TABLE
クエリを使用してインデックスの再構築を試みています。以下のエラーが発生します:
テーブルは最適化をサポートせず、代わりに再作成+分析を実行します
これは何を意味するのでしょうか?MySQLエンジンはインデックスの再構築を許可していませんか?MySQL 5.5エンジンレベルで、このメッセージの背後で何が行われていますか?
私はMySQL 5.5に取り組んでおり、OPTIMIZE TABLE
クエリを使用してインデックスの再構築を試みています。以下のエラーが発生します:
テーブルは最適化をサポートせず、代わりに再作成+分析を実行します
これは何を意味するのでしょうか?MySQLエンジンはインデックスの再構築を許可していませんか?MySQL 5.5エンジンレベルで、このメッセージの背後で何が行われていますか?
回答:
それは本当に情報メッセージです。
おそらく、あなたは上のOPTIMIZEをやっているのInnoDB(というよりも、InnoDBストレージエンジンを使用してテーブルをテーブルのMyISAMストレージエンジン)。
InnoDBはMyISAMのようにOPTIMIZEをサポートしていません。何か違うことをします。空のテーブルを作成し、既存のテーブルからすべての行をそのテーブルにコピーし、基本的に古いテーブルを削除して新しいテーブルの名前を変更し、ANALYZEを実行して統計を収集します。これは、InnoDBがOPTIMIZEを実行できる最も近いものです。
あなたが得るメッセージは基本的にMySQLサーバーであり、InnoDBストレージエンジンがMySQLサーバーに言ったことを繰り返します:
テーブルは最適化をサポートしていません InnoDBストレージエンジンは言っています...
「私(InnoDBストレージエンジン)は、友人(MyISAMストレージエンジン)のようにOPTIMIZE操作を実行しません。」
「代わりに再作成+分析を行う」とは、InnoDBストレージエンジンによると...
「私は、同等の結果が得られる別の一連の操作を実行することにしました。」
OPTIMIZE TABLE
公式サポート記事によると、InnoDBエンジンで正常に動作します:http : //dev.mysql.com/doc/refman/5.5/en/optimize-table.html
InnoDBテーブルを最適化すると、テーブル構造が再構築され、インデックス統計が更新されます(のようなものALTER 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 |
+----------+----------+----------+-------------------------------------------------------------------+
最良のオプションは、同じプロパティで新しいテーブルを作成することです
CREATE TABLE <NEW.NAME.TABLE> LIKE <TABLE.CRASHED>;
INSERT INTO <NEW.NAME.TABLE> SELECT * FROM <TABLE.CRASHED>;
NEW.NAME.TABLEおよびTABLE.CRASHの名前を変更します
RENAME TABLE <TABLE.CRASHED> TO <TABLE.CRASHED.BACKUP>;
RENAME TABLE <NEW.NAME.TABLE> TO <TABLE.CRASHED>;
うまくいったら削除
DROP TABLE <TABLE.CRASHED.BACKUP>;
より適切なオプションは、新しいテーブルを作成して行を宛先テーブルにコピーし、実際のテーブルを削除して、新しく作成したテーブルの名前を変更することです。この方法は小さなテーブルに適しています。