説明-最も強力なMySQLチーム

MySQLで最も強力なコマンドはEXPLAINです。 EXPLAINは、リクエストを実行すると何が起こるかを正確に伝えることができます。 この情報により、低速なリクエストを検出し、リクエストの処理に費やす時間を短縮できます。これにより、アプリケーションを大幅に高速化できます。

EXPLAINコマンドの使用方法


このコマンドを使用する非常に簡単な例を次に示します。

データベーススキーマ:

(ユーザーとユーザーのテーブル)


(アドレス付きのテーブル)


この例では、識別子(userid)に基づいてユーザーデータを選択します。
EXPLAINリクエストを実行した結果、次のようになります。

可変価値
クエリ内のテーブルの識別子(ID)。 EXPLAINは、クエリ内のテーブルごとに1つのレコードを作成します。
可能な値は、SIMPLE、PRIMARY、UNION、DEPENDENT UNION、SUBSELECT、およびDERIVEDです。
MySQLがデータを読み取るテーブルの名前
MySQLが使用する結合のタイプ。 可能な値は、eq_ref、ref、range、index、またはallです。
MySQLがテーブル内の行を選択するために使用できるインデックスのリスト(インデックスがない場合はNULL)。
MySQLが使用するインデックスの名前(可能なすべてのインデックスをチェックした後)。
バイト単位のキーサイズ。
キーとの比較に使用される列または値。
MySQLがリクエストを処理するためにチェックする必要がある行の数。
リクエストに関する追加情報。

この例は非常に簡単です。 主キー(userid)で検索しますが、条件に合ったレコードは1つしかありません(rows変数は1です)。

より高度な例を次に示します。

このリクエストは最初のリクエストよりも高度です。 ユーザーIDに基づいてユーザーとアドレステーブルを結合します。 ユーザーIDフィールドはユーザーテーブルのプライマリキーですが、アドレステーブルのインデックスではありません。 この場合のEXPLAINコマンドの実行結果は次のようになります。
(ユーザーテーブル)
タイプ:const
可能なキー:プライマリ
参照:const
(テーブルアドレス)
タイプ:すべて
可能なキー:(なし)
参照:(なし)

最初のテーブルが最適化されます。 主キーは、リクエストの実行に使用されます。 2番目のテーブルは最適化されていません。 typeパラメーターの値はすべてで、Posible_keysは空です。つまり、全表スキャンが実行されます。 2番目のテーブルのユーザーフィールドにインデックスを追加すると、最適化されます。
2番目のテーブルを最適化した後のEXPLAINコマンドの出力は次のとおりです。
(ユーザーテーブル)
タイプ:const
可能なキー:プライマリ
参照:const
(テーブルアドレス)
タイプ:const
可能なキー:プライマリ
参照:const

EXPLAINコマンドの詳細については、MySQLの公式ドキュメント( dev.mysql.com/doc/refman/5.0/en/explain.html)を参照してください。

Source: https://habr.com/ru/post/J31129/


All Articles