ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE
tbl_name [, tbl_name] ...
ANALYZE TABLE
は、テーブルのキー分布を分析して格納します。分析中、そのテーブルは InnoDB
および MyISAM
に対する読み取りロックでロックされます。このステートメントは、InnoDB
、NDB
、および MyISAM
テーブルで機能します。MyISAM
テーブルの場合、このステートメントは myisamchk --analyze を使用することと同等です。
InnoDB
内で分析がどのように機能するかの詳細は、セクション14.13.16.1「永続的オプティマイザ統計のパラメータの構成」およびセクション14.13.17「InnoDB テーブルに対する ANALYZE TABLE の複雑さの推定」を参照してください。セクション14.6.7「InnoDB テーブル上の制限」も参照してください。特に、innodb_stats_persistent
オプションを有効にした場合は、InnoDB
テーブルに大量のデータをロードするか、またはそのテーブルの新しいインデックスを作成したあとに ANALYZE TABLE
を実行する必要があります。
MySQL は、格納されたキー分布を使用して、定数以外の何かに対して結合が実行されたときにテーブルを結合する順序を決定します。さらに、クエリー内の特定のテーブルにどのインデックスを使用するかを決定する場合は、キー分布を使用できます。
このステートメントには、このテーブルに対する SELECT
および INSERT
権限が必要です。
ANALYZE TABLE
はパーティション化されたテーブルに対してサポートされているため、ALTER TABLE ... ANALYZE PARTITION
を使用して 1 つ以上のパーティションを分析できます。詳細は、セクション13.1.7「ALTER TABLE 構文」およびセクション19.3.4「パーティションの保守」を参照してください。
MySQL 5.6.11 でのみ、このステートメントを発行する前に、gtid_next
を AUTOMATIC
に設定する必要があります。(Bug #16062608、Bug #16715809、Bug #69045)
ANALYZE TABLE
は、次のカラムを含む結果セットを返します。
カラム | 値 |
---|---|
Table |
テーブル名 |
Op |
常に analyze
|
Msg_type |
status 、error 、info 、note 、または warning
|
Msg_text |
情報メッセージ |
SHOW INDEX
ステートメントを使用して、格納されたキー分布を確認できます。セクション13.7.5.23「SHOW INDEX 構文」を参照してください。
テーブルが最後の ANALYZE TABLE
ステートメントのあとに変更されていない場合、そのテーブルが再度分析されることはありません。
デフォルトでは、サーバーは ANALYZE TABLE
ステートメントをバイナリログに書き込み、それらがレプリケーションスレーブにレプリケートされるようにします。ロギングを抑制するには、オプションの NO_WRITE_TO_BINLOG
キーワード、またはそのエイリアス LOCAL
を指定します。