ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLEtbl_name
[,tbl_name
] ...
ANALYZE TABLE
はテーブルのキーの分布を分析、格納します。分析の最中に、テーブルは
MyISAM
の読み取りロックを利用してロックされます。InnoDB
には、テーブルは書き込みロックでロックされます。このステートメントは
MyISAM
と
InnoDB
テーブルと共に機能します。MyISAM
テーブルにとっては、このステートメントは
myisamchk --analyze
を利用することと同じです。
解析が InnoDB
内でどのように機能するのかということに関する情報については、項9.14. 「InnoDB
テーブル上の制約」
を参照してください。
MySQL は、定数以外の何かに対して結合を実行したとき、どの順番でテーブルが結合されるべきかを決めるために格納されたキー分布を利用します。さらに、クエリー内の特定のテーブルにどのインデックスを使用するかを決定する場合は、キー分布を使用できます。
このステートメントはテーブルに
SELECT
と
INSERT
権限を要求します。
MySQL 5.1.27
からは、ANALYZE
TABLE
はパーティション化されたテーブルに対してもサポートされています。また、MySQL
5.1.27 からは、ALTER TABLE ...
ANALYZE PARTITION
を使用して 1
つ以上のパーティションを解析することもできます。詳細については、項8.1.7. 「ALTER TABLE
構文」
および Maintenance of Partitions
を参照してください。
ANALYZE TABLE
は、次のカラムを含む結果セットを返します。
カラム | 値 |
テーブル |
テーブル名 |
Op |
いつも analyze
|
Msg_type |
status 、error 、info 、または
warning
|
Msg_text |
情報メッセージ |
SHOW INDEX
ステートメントを利用して格納されたキー分布を確認することができます。項8.5.5.23. 「SHOW INDEX
構文」
を参照してください。
もしテーブルが前回の
ANALYZE TABLE
ステートメント以降変更されていなければ、そのテーブルは再解析されません。
デフォルトでは、ANALYZE
TABLE
ステートメントはレプリケーションスレーブに複製されるように、バイナリログに書き込まれます。ロギングは、オプションの
NO_WRITE_TO_BINLOG
キーワードまたはそのエイリアス
LOCAL
を使用して抑制できます。