Explain を理解する必要がある理由:
選択クエリの内部状況、クエリ オプティマイザーの動作、インデックスが使用されているかどうかを理解したい場合は、Explain でそれが可能です。
MySQL クエリ オプティマイザーの仕組み:
MySQL クエリ オプティマイザーにはいくつかの目標がありますが、主な目標は、可能な限り インデックス を使用し、最も制限の厳しいインデックスを使用してできるだけ多くの行を削除することです。可能な限りデータの。最終的な目標は、データ行を除外するのではなく、データ行を検索するために SELECT ステートメントを送信することです。オプティマイザが行を除外しようとする理由は、行を除外する速度が速くなり、条件に一致する行をより速く見つけることができるためです。最も厳密なテストを最初に実行すると、クエリをより速く実行できます。
1. Explain 属性パラメーターは合計 10 個あります
2. EXPLAIN 列の説明: 1.id:
選択済み実行計画でクエリされるシーケンス番号 。クエリ内で選択句または操作テーブルが実行される順序を示します。id 値が大きいほど、優先順位が高く、より早く実行されます。 ID は同じで、実行順序は上から下になります。 2.select_type:
クエリの種類、説明:
3.table:
4.type:
これは、接続にどのようなタイプ が使用されるかを示す重要な列です。 結合タイプは最良のものから最悪なものまで、const、eq_reg、ref、range、index、ALL
です。5.possible_keys: このテーブルに適用される可能なインデックスを示します。空の場合、インデックスは作成できません。関連するドメインの WHERE ステートメントから適切なステートメントを選択できます
6.key: 実際に使用されるインデックス。 NULL の場合、インデックスは使用されません。まれに、MYSQL が最適化が不十分なインデックスを選択することがあります。この場合、SELECT ステートメントで USEINDEX(indexname) を使用してインデックスの使用を強制するか、IGNORE を使用できます。 MYSQL にインデックスを無視させる INDEX (indexname)
7.key_len: 使用される インデックスの長さ 。精度を失うことなく、長さが短いほど優れています
8.ref: インデックスのどの列が使用されているかを示します 、可能であれば定数 9.rows :
要求されたデータを返すために MYSQL がチェックする必要があると考える 行の数10.補足:
MYSQL についてはどうですか 追加情報 クエリの解析用。 ここで見ることができる悪い例は、 一時的およびファイルソートの使用は、MYSQL がインデックスをまったく使用できないことを意味し、その結果、取得が非常に遅くなるため、避ける必要があります。 明らかに、type が ALL の場合、それは最悪のケースです。 filesort の使用は Extra にも表示されますが、これも最悪のケースであり、最適化が必要です。
インデックスを追加するほど、さまざまな大きさのテーブルにトレードオフが生じるため、インデックスを合理的に追加できる必要があります。
ステートメントを最適化する必要があるかどうかを確認するには Explain を使用しますか?
上記は MySQL 分析の詳細な紹介です。詳細については、PHP 中国語 Web サイト (www.php.cn) をご覧ください。