MySQLはEXPLAINステートメント

MySQLは実装であるために、EXPLAIN機能DESCRIBE同じ。前者はMySQLはSQL文を(実行できる方法を実証するために使用しながら、通常、情報テーブルを取得するために使用される実践、実行計画の情報を取得)。

DESCRIBE本質的COLUMNS SHOW文の形式を省略します。

  • EXPLAIN SELECT、DELETE、INSERT、REPLACE、およびUPDATE:これらのSQLのキーワードに基づいて行動することができます。
  • MySQLはなど、クエリのSQLステートメントを処理する方法で最適化され、対応するSQL文の後に実施計画(実行計画)を示しステートメント解釈可能(説明できるの文)、として使用する場合、JOIN文がどのように組み合わせるかであるとき、マルチテーブルどのような順序で組み合わせます。
  • 用としてFOR CONNECTION connection_id代わりに解釈可能文の時間、接続の実施計画を示すこと。
  • それは、パーティションテーブルを照会するために来るとき、EXPLAIN非常に有用であろう。

EXPLAINクエリの最適化をスピードアップするためにインデックスを追加する場所を確認することができ、あなたも最高の時間は、リンクテーブルを表示するかどうかを注文することができます。

EXPLAIN出力され、検索に参加するそれぞれの結果テーブルの行を生成し、これらの順序を順次およびMySQLによって読み取られます。MySQLのが行われる、すなわち、最初のように、テーブルの最初のレコードを読み取る再び第3のテーブルに一致する、一致するレコードを検索するために、第2のテーブルに移動し、そして、操作、それは実際には、ネストされたループによって行われるJOIN。

実行計画を表示Wrokbench

MySQLのGUIツールのワークベンチは、パフォーマンスの分析に有用である実行計画を、表示する視覚的な方法を提供します。

実行計画でのMySQL Workbenchを視覚的に表示

実行計画でのMySQL Workbenchを視覚的に表示

出力テーブルをEXPLAIN意味

列名 JSONの列名 意味
ID select_id IDを選択します
SELECT_TYPE N / A SELECTタイプ
TABLE_NAME テーブル名のライン出力の建設
パーティション パーティション パーティションテーブルを一致させるには
タイプ ACCESS_TYPE JOIN型を
possible_keys possible_keys オプションのインデックス
キー キー レアル選択されたインデックス
key_lenに key_length 選択した結合の長さは、
REF REF そして、比較のために列インデックス
クエリのレコードの推定数
フィルタ フィルタ パーセンテージは、クエリレコードからフィルタリングされます
エクストラ N / A その他の追加情報

EXPLAIN出力のテーブルの上のMySQLリファレンスマニュアルから

JSONは、出力が場合JSON形式を使用する列名としてエクスポートされた場合のリストです。

どちらのselect_typeタイプは、以下の表のすべての可能な値を選択します。

SELECT_TYPE値 JSONの名前 意味
SIMPLE 無し SELECT、UNIONなしサブクエリの一般的なタイプ
PRIMARY 無し 最も外側のSELECT
連合 無し 目以降SELECT UNIONと一緒に使用すると
DEPENDENT UNION (真)に依存 UNIONで使用される場合、第二及び後続のSELECTは、外側のクエリが異なるため
UNION結果 union_result UNIONは、結果を返さ
SUBQUERY 無し 最初のサブ問合せは、SELECT
DEPENDENT SUBQUERY (真)に依存 外側のクエリが変化するので、SELECTサブクエリ最初
派生 無し 派生テーブル
派生依存性 (真)に依存 表は、派生他のテーブルに依存します
MATERIALIZED materialized_from_subquery マテリアライズド・サブクエリ
UNCACHEABLE SUBQUERY キャッシュ可能(偽) あなたは必要な最初の行のために再実行し、サブクエリをキャッシュすることはできません
UNCACHEABLE UNION キャッシュ可能(偽) 第二及び後続のSELECTでキャッシュ不可サブクエリのUNION

type 最適な時間からの注文以下の値をとることができ、それが結合されているかの種類の説明を、登録しよう:

  • システム:テーブル内の1つのレコードのみ、所属constのインクルードは、特殊なケースを入力し登録しよう。
  • CONST:表せいぜい1つのに一致するレコード。そこに一つだけなので、定数は、クエリ最速最適化されているとして、列の値を使用することができます削除しますので。主キー(PRIMARY KEY)または一意のインデックス(UNIQUEインデックス)は、このタイプの定数を用いて比較した場合。
SELECT  *  FROM tbl_nameをWHERE PRIMARY_KEY = 1 ;

SELECT  *  FROM tbl_nameを
   WHERE primary_key_part1 = 1  AND primary_key_part2 = 2 ;
  • でeq_ref:テーブル内の各レコードの前の組み合わせのために、リストからレコードを読んでいます。このタイプは、使用して索引列に使用することができます=比較用の演算子を。
SELECT  *  FROM other_table、ref_table
   WHERE  ref_tableKEY_COLUMN = other_tableコラム ;

SELECT  *  FROM other_table、ref_table
   WHERE  ref_tablekey_column_part1 = other_table
   ref_tablekey_column_part2 = 1
  • REFは:表の上記レコードの組み合わせごとに、すべてのテーブルからインデックスに一致するすべてのレコードを読み出します。主キーまたは一意索引列、または唯一のキー接頭シーンに参加するための非参照を使用している場合。
SELECT  *  FROM ref_table WHERE KEY_COLUMN = exprの。

SELECT  *  FROM other_table、ref_table
   WHERE  ref_tableKEY_COLUMN = other_tableコラム ;

SELECT  *  FROM other_table、ref_table
   WHERE  ref_tablekey_column_part1 = other_table
   ref_tablekey_column_part2 = 1
  • FULLTEXT:FULLTEXTインデックス・タイプを使用して登録しよう
  • ref_or_null refに似ていますが、追加のクエリNULL値を行います。このタイプの最適化は、一般的に、サブクエリ、ref_or_null ref_tableに対処するためにMySQLのアセンブリテーブルを使用して、以下の例のJOINで使用されています。
SELECT  *  FROM ref_table
   WHERE KEY_COLUMN = exprのOR KEY_COLUMNはIS NULL ;
、INSELECT KEY_COLUMNをFROM SINGLE_TABLE some_expr)
  • 範囲:のみ記録範囲を返します。
  • インデックス:ALL同じ種類のが、唯一の検索するインデックスを使用しています。
  • ALL:全表スキャンのクエリ。

関連資源

おすすめ

転載: www.cnblogs.com/Wayou/p/mysql_explain_clause.html