explain は、MySQL が indexes を使用して select ステートメントを処理し、テーブルを結合する方法を示しています。より適切なインデックスを選択し、より最適化されたクエリ ステートメントを作成するのに役立ちます。
Explain の使用は非常に簡単で、選択クエリ ステートメントの前に Explain キーワードを追加するだけです。例を以下に示します。
エコーされたデータの意味は以下に示されます。
(1) id: SELECT クエリのシーケンス番号である SELECT 識別子。
(2) select_type: 以下の値を持つタイプを選択します
1) シンプル union とサブクエリ
2)primary 最外面的select,在有子查询的语句中,最外面的select查询就是primary。 3)union union语句的第二个或者说是后面那一个.现执行一条语句。
explain select * from uchome_space limit 10 union select * from uchome_space limit 10,10
を持たない単純な選択を表します (4) テーブル: この行のデータがどのテーブルに関するものかを示します
(5) タイプ: これは重要な列であり、接続の使用状況を示しますどんなタイプ。最適な結合タイプから最悪の結合タイプは、const、eq_reg、ref、range、index、ALL
です (6) possible_keys: このテーブルに適用される可能性のあるインデックスを表示します。空の場合、インデックスは作成できません。関連するドメインの WHERE ステートメントから適切なステートメントを選択できます
(7) キー: 実際に使用されるインデックス。 NULL の場合、インデックスは使用されません。まれに、MYSQL が最適化が不十分なインデックスを選択することがあります。この場合、SELECT ステートメントで USE INDEX (indexname) を使用してインデックスの使用を強制するか、IGNORE INDEX (indexname) を使用して MYSQL にインデックスを無視させることができます
(8) key_len:使用されるインデックス。精度を損なうことなく、長さは短いほど良いです
(9) ref: インデックスのどの列が使用されているかを示します (可能であれば定数)
(10) rows: MYSQL は数値を返すためにチェックする必要があると考えます要求されたデータの行数。
(11)追加: MYSQL がクエリを解析する方法に関する追加情報。悪い例は、一時的な使用とファイルソートの使用です。これは、MYSQL がインデックスをまったく使用できないことを意味し、その結果、取得が非常に遅くなります
1)Distinct:一旦MYSQL找到了与行相联合匹配的行,就不再搜索了 2)Not exists: MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了 3)Range checked for each Record(index map:#):没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。 这是使用索引的最慢的连接之一 4)Using filesort: 看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。 它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行 5)Using index: 列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候 6)Using temporary 看到这个的时候,查询需要优化了。这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上
以上がMySQL クエリ パフォーマンス分析ツール - キーワード分析の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。