MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

8.8.1 EXPLAIN によるクエリーの最適化

EXPLAIN ステートメントは、MySQL がステートメントをどのように実行するかに関する情報を提供します。

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_nameDESCRIBE tbl_name および SHOW COLUMNS FROM tbl_name と同義です。 詳細については、セクション13.8.1「DESCRIBE ステートメント」およびセクション13.7.7.5「SHOW COLUMNS ステートメント」を参照してください。