EXPLAIN
ステートメントは、MySQL がステートメントをどのように実行するかに関する情報を提供します。
EXPLAIN
は、SELECT
,DELETE
,INSERT
,REPLACE
およびUPDATE
ステートメントで動作します。説明可能なステートメントで
EXPLAIN
を使用すると、MySQL は、オプティマイザからのステートメント実行プランに関する情報を表示します。 つまり、MySQL はテーブルがどのように、どんな順番で結合されているかに関する情報を含む、ステートメントを処理する方法を説明します。EXPLAIN
を使用して、実行プラン情報を取得することについては、セクション8.8.2「EXPLAIN 出力フォーマット」を参照してください。EXPLAIN
を説明可能なステートメントではなくFOR CONNECTION
とともに使用すると、名前付き接続で実行されているステートメントの実行計画が表示されます。 セクション8.8.4「名前付き接続の実行計画情報の取得」を参照してください。connection_id
SELECT
ステートメントの場合、EXPLAIN
は、SHOW WARNINGS
を使用して表示できる追加の実行計画情報を生成します。 セクション8.8.3「拡張 EXPLAIN 出力形式」を参照してください。EXPLAIN
は、パーティションテーブルを含むクエリーの調査に役立ちます。 セクション24.3.5「パーティションに関する情報を取得する」を参照してください。FORMAT
オプションを使用して、出力形式を選択できます。TRADITIONAL
は表形式で出力を表示します。FORMAT
オプションが存在しない場合、これはデフォルトです。JSON
フォーマットは JSON フォーマットで情報を表示します。
EXPLAIN
によって、インデックスを使用して行を見つけることで、ステートメントが高速に実行されるように、テーブルにインデックスを追加するべき場所がわかります。 また、EXPLAIN
を使用して、オプティマイザがテーブルを最適な順序で結合しているかどうかを確認することもできます。 SELECT
ステートメントでテーブルが指定されている順序に対応する結合順序を使用するように、オプティマイザにヒントを提供するには、ステートメントを SELECT
だけでなく、SELECT STRAIGHT_JOIN
で始めます。 (セクション13.2.10「SELECT ステートメント」を参照してください。) ただし、準結合変換が無効になっているため、STRAIGHT_JOIN
ではインデックスが使用されない場合があります。 セクション8.2.2.1「準結合変換による IN および EXISTS サブクエリー述語の最適化」を参照してください。
オプティマイザトレースは、EXPLAIN
のトレースを補完する情報を提供する場合があります。 ただし、オプティマイザのトレース形式と内容はバージョン間で変更される可能性があります。 詳細については、「MySQL Internals: Tracing the Optimizer」を参照してください。
インデックスが使われるはずであると思うタイミングでそれらが使われていない問題がある場合、ANALYZE TABLE
を実行して、オプティマイザが行う選択に影響する可能性があるキーのカーディナリティーなどのテーブル統計を更新します。 セクション13.7.3.1「ANALYZE TABLE ステートメント」を参照してください。
EXPLAIN
はテーブル内のカラムに関する情報を取得するためにも使用できます。 EXPLAIN
は tbl_name
DESCRIBE
および tbl_name
SHOW COLUMNS FROM
と同義です。 詳細については、セクション13.8.1「DESCRIBE ステートメント」およびセクション13.7.7.5「SHOW COLUMNS ステートメント」を参照してください。
tbl_name