7.2.1 EXPLAIN 構文 (SELECT 関連情報の取得)
EXPLAIN tbl_name
or:
EXPLAIN SELECT select_options
EXPLAIN ステートメントは DESCRIBE の同義語として使用でき、また、 a MySQL によって実行される SELECT ステートメントに関する情報。
EXPLAIN tbl_name 構文は、DESCRIBE tbl_name または SHOW COLUMNS FROM tbl_name と同じです。
SELECT ステートメントの前にキーワード EXPLAIN を使用すると、MYSQL は SELECT ステートメントがどのように実行されるかを説明し、テーブルがどのように接続されているか、接続の順序、その他の情報を示します。
この章では主にEXPLAINの2番目の使用法について説明します。
EXPLAIN の助けを借りて、レコードを検索するためにインデックスを使用し、SELECT をより速く実行するためにテーブルにインデックスを追加するタイミングがわかります。
インデックスの不適切な使用によって問題が発生した場合は、ANALYZE TABLE を実行して、キーのカーディナリティなどのテーブルの統計を更新できます。これは、最適化でより適切な選択を行うのに役立ちます。詳細は、「14.5.2.1 ANALYZE TABLEの構文」を参照してください。
オプティマイザーが最適な順序でデータテーブルを結合するかどうかも確認できます。オプティマイザが SELECT ステートメントでテーブル名の順序で結合するには、クエリの先頭で SELECT だけでなく SELECT STRAIGHT_JOIN を使用します。
EXPLAIN は、SELECT ステートメントで使用される各テーブルに関する情報を含むレコードの行を返します。テーブルは、MySQL が実行しようとしているクエリで読み取られた順序で結果にリストされます。 MySQL は、複数の接続をスキャンする方法 (シングル スイープ、マルチジョイン) を使用して接続を解決します。これは、MySQL が最初のテーブルからレコードを読み取り、次に 2 番目のテーブルで対応するレコードを検索し、次に 3 番目のテーブルでそれを検索するということを意味します。すべてのテーブルがスキャンされると、選択されたフィールドが出力され、見つからなくなるまですべてのテーブルを遡って調べます。これは、一部のテーブルに一致するレコードが複数ある可能性があるため、次のレコードはこのテーブルから読み取られ、次の A から読み取られます。テーブルは処理の続行を開始します。