~Linux、MySQLからAJAXまでMySQLのEXPLAINの実行例MySQLのEXPLAINの実行例と解析方法についてまとめました。※目次をクリックすると目次の下部にコンテンツが表示されます。・idクエリのID(テーブルのIDではないので注意)・select_typeクエリの種類を表す。サブクエリーを使用しない)。・table対象のテーブル・typeレコードアクセスタイプ。どのようにテーブルにアクセスされるかを示す。あり、クエリーの開始時に読み取られる。ないため、このレコードのカラムの値はオプティマイザによって定数と見なされる。回しか読み取られないため、非常に高速。キーを定数と比較する場合に使用される。・possible_keys利用可能なキー。・key_len選択されたキーの長さ(バイト)・rows行数の概算見積もり。・Extraオプティマイザヒント。index2)単純検索の結果との相違1typeが”const”から”range”に変りました。※typeレコードアクセスタイプ。どのようにテーブルにアクセスされるかを示す。●const・一致するレコードが最大で1つあり、クエリーの開始時に読み取られる。・レコードが1つしかないため、このレコードのカラムの値はオプティマイザによって定数と見なされる。・テーブルは1回しか読み取られないため、非常に高速。KEY/UNIQUEキーを定数と比較する場合に使用される。●range・インデックスを使用して、一定の範囲にあるレコードのみが取り出される。・keyカラムに使用されるインデックスが示される。・key_len_には使用される最長のインデックス部分が記載される。・この型ではrefカラムがNULLになる。NULL、<=>、BETWEEN、IN()を使用してキーカラムを定数と比較する場合に使用できる。index”と記述されています。index・インデックスツリーの情報のみを使用してカラム情報がテーブルから取り出され、実際の行を読み取るその後の検索を実行する必要がないことを示す。・この方針は、クエリーで単一のインデックスの構成部分であるカラムのみが使用される場合に使用できる。where・次のテーブルとの一致が調べられるレコードまたはクライアントに送信されるレコードの限定にWHERE節が使用されることを示す。whereではなく、テーブルの型がALLまたはindexである場合はクエリーが正常に実行されないことがある(テーブルのすべてのレコードの取得や検査を意図していない場合)。whereカラムにキーが設定されていないため、typeがALLになっています。フルテーブルスキャンが実行されています。indextypeがrangeに変ってインデックスが使用されています。wherebuildとsizeの二つのカラムにインデックスが指定されていてキーとして使用可能となっています。実際にどちらのキーを使用するかは、指定した検索条件を考慮し、選択してくれるようです。rangeとなっていて、インデックスを使用して、一定の範囲にあるレコードのみが取り出されています。NULLとなっていてインデックスが使用されていないことが分かります。※typeのindexは下記意味になります。インデックスツリーのみがスキャンされる点を除いてALL(フルスキャン)と同じである。NULLとなっていてインデックスが使用されていないことが分かります。※typeのindexは下記意味になります。インデックスツリーのみがスキャンされる点を除いてALL(フルスキャン)と同じである。index"について・インデックスツリーの情報のみを使用してカラム情報がテーブルから取り出され、実際の行を読み取った後に検索を実行する必要がないことを示す。クエリーでインデックスの構成部分であるカラムのみが使用される場合に表示される。indexが表示される例where句でインデックスを使って条件を指定し、インデックスで指定したカラムのみ表示。indexとはならない。indexとならない。sec)where句ではインデックスキーに式や関数を指定しない・MySQLでは、クエリーでカラムが式の一部であったり関数内で使用されていると通常インデックスが使用されない。・下記のような単純な式を使ったクエリーでも問題となってしまうので注意する。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。