おかげで著者:呂チー鉉リンク:https://www.cnblogs.com/xuanzhi201111/p/4175635.html
日常の仕事では、我々は、多くの場合、これらのSQL文のいずれかを表示するには、このコマンドの説明使用し、何かをSQL仕事を意味するものではありませんこれらのステートメントを識別し、SQL文を実行するために、比較的長い時間の一部を遅くするクエリを記録する時間を持つことになります実行計画は、SQL文がインデックスには使用していない参照して、説明コマンドで見ることができる全表スキャンを行っていません。だから我々は、MySQLのコストベース・オプティマイザを理解し、あなたも多くの詳細を最適化することができる取得したアクセスポリシーは、同様の戦略は、オプティマイザを採用することが期待されているSQL文を実行しているときのように、考慮されることができます。(QEP:クエリ実行プランを生成するために、SQL実行計画)
MySQLの>サーバSELECT * FROM説明。 + ---- + ------------- + --------- + ------ + ------------- - + ------ + --------- + ------ + ------ + ------- + | ID | SELECT_TYPE | 表| タイプ| possible_keys | キー| key_lenに| REF | 行| エクストラ| + ---- + ------------- + --------- + ------ + ------------- - + ------ + --------- + ------ + ------ + ------- + | 1 | SIMPLE | サーバ| ALL | NULL | NULL | NULL | NULL | 1 | NULL | + ---- + ------------- + --------- + ------ + ------------- - + ------ + --------- + ------ + ------ + ------- + セットにおける1行(0.03秒)
情報のうち10を有するexpain、即ち、ID、SELECT_TYPE、テーブル、タイプ、possible_keys、キー、key_lenに、REF、行、余分な、これらのフィールドを解釈することができるために発生し、次の
、 上述したID
私の理解では、SQL識別子の実行順序は、SQLの降順を実行することです
1. IDは、上から下への順序と同じです
2.サブクエリ、IDシリアル番号がインクリメントされている場合は、IDの値より大きい優先度の高い、最初に実行されます
3.id同じ場合、実行ダウンの順序から、グループとして考えることができる、全ての群において、より大きなID値、優先順位の高い、最初の実行
二、SELECT_TYPE
これは、各クエリselect句の種類を示してい
(1)SIMPLE(単純なSELECT、UNIONまたはサブクエリを使用していません)
(2)一次(クエリは、任意の複雑なサブ部分を含む場合、最外層がPRIMARYとしてマークされている選択)
(3)UNION(UNION第二以降のSELECT文)
(4)(クエリの外側に応じて第二以降のSELECT文のUNION)DEPENDENT UNION
(5)UNION結果(UNION結果)
(6)SUBQUERY(最初のサブSELECTクエリ)
(7)DEPENDENT SUBQUERY(最初のサブクエリのSELECTクエリの外側に応じて)
(8)(節サブクエリから派生テーブルSELECT)に由来
(9)UNCACHEABLE SUBQUERY(サブクエリの結果をキャッシュすることはできません、あなたは再評価の最初の行がリンクされている必要があります)
三、テーブル
表示データのこのラインは、テーブル、時にはない真のテーブル名について、(Iは第一段階の結果が行われていることを理解し、xは数である)derivedx参照します
MySQLは>から(選択*から(T1 ID = 2602)A SELECT * FROM)B *セレクト説明します。 + ---- + ------------- + ------------ + -------- + -------- ----------- + --------- + --------- + ------ + ------ + ---- --- + | ID | SELECT_TYPE | 表| タイプ| possible_keys | キー| key_lenに| REF | 行| エクストラ| + ---- + ------------- + ------------ + -------- + -------- ----------- + --------- + --------- + ------ + ------ + ---- --- + | 1 | PRIMARY | <derived2> | システム| NULL | NULL | NULL | NULL | 1 | | | 2 | 派生| <derived3> | システム| NULL | NULL | NULL | NULL | 1 | | | 3 | 派生| T1 | const | PRIMARY、idx_t1_id | PRIMARY | 4 | | 1 | | + ---- + ------------- + ------------ + -------- + -------- ----------- + --------- + --------- + ------ + ------ + ---- --- +
四、タイプ
MySQLはまたとして知られているテーブル内の所望の線、表現する方法を見つける「アクセスタイプ」を
一般的に使用されるタイプは次のとおりです。 ALL、インデックス、レンジ、REF、でeq_ref、constの、システム、(良好なパフォーマンスに貧しいから、左から右へ)NULL
ALL:全表スキャン、MySQLは一致する行を見つけるために、テーブル全体を横断します
インデックス:フルインデックススキャン、インデックスとインデックスタイプのみALL横断インデックスツリーを区別するために
範囲は:行のみを選択するためにインデックスを使用して、与えられた範囲の行を検索します
REF:インデックス列の列または定数値を見つけるために使用される、すなわち、接続テーブルの整合状態を示します
でeq_ref:REF同様に、各インデックスキーの一意なインデックスを使用してインデックスの差が、テーブルのマッチに1つのレコードのみ、簡単に言えば、主キーまたは状態に関連する一意のキーとして、マルチテーブルを使用参加します
constの、システム:MySQLのクエリの最適化の一部、および、アクセスのこれらのタイプを使用して、定数に変換されたとき。ここで、主キーリスト配置されるように、MySQLが一定にクエリを変換することができ、システムのconst型は、テーブルのクエリの唯一の行は、システムを使用する場合には、特殊なケースであります
NULL:行う場合、最適化プロセスでのMySQL分解文も、テーブルまたはインデックスにアクセスすることなく、例えば、最小値で索引付けされた列から選択は、個別のインデックス・ルックアップを介して行うことができます。
五、possible_keys
これは、MySQLはインデックスがある場合、インデックスが関与フィールドに表示されますが、必ずしも使用して照会することがないクエリ、テーブル内のレコードを検索するために使用することができますどのインデックスを示しています
この列は、出力をEXPLAIN示す順序テーブルの完全に独立しています。これは、実際にはいくつかの重要possible_keysは順序テーブルを使用して生成することができないことを意味します。
列がnullの場合、関連する指標。それはあなたのクエリのパフォーマンスを向上させるために、インデックスのためのいくつかの列または列を参照する場合は、このケースでは、WHERE句を調べることによって確認することができます。その場合は、適切なインデックスを作成し、EXPLAINでクエリをもう一度確認してください
六、キー
キー列の表示キー(インデックス)MySQLは、実際に使用することにしました
あなたは、インデックスを選択しない場合、キーはNULLです。、possible_keys列のインデックスを使用するか、無視するMySQLを強制するクエリでFORCE INDEXを使用し、使用のINDEXまたはINDEXを無視します。
七、key_lenに
、インデックスがクエリに使用することができるインデックスに使用されるバイトの数は、列の長さによって計算されることを示し(インデックスフィールドの最大可能長さの値はkey_lenに、実際の長さ、すなわち、基礎key_lenにテーブル定義に基づいて計算されていない表示しましたテーブルによって取得)
できるだけ正確さを失うことなく、長さの短いです
八、REF
整合条件を表1に示す接続、すなわち定数、またはインデックス列の値を見つけるために使用される列
九、行
MySQLのテーブルの統計情報とインデックス選択を表現するためによると、行の推定数が読み取られるレコードを検索するために必要な
テン、エクストラ
このカラムには、MySQLのクエリ、次のような状況を解決するための詳細な情報が含まれています。
表形式データを読み出しているときだけでなく、テーブルの列である同じインデックス上のすべての要求の一部に発生したindexアクション復帰の情報の実際の使用から、MySQLサーバを発現します。ここで使用濾過した後、ストレージエンジンで行を取得します
一時的な使い方:MySQLは、結果セットを保存するために一時テーブルを使用する必要性を表明ソートで共通してクエリをグループ化します
filesortレコードを使用する:MySQLは、ソート操作を完了するためにインデックスを使用することはできませんが、「ソート・ファイル」と呼ばれています
バッファに参加使用:インデックスの値を変更するために使用する接続状態を得ながら強調し、中間結果を格納するバッファを接続する必要がありません。この値が存在する場合、それは注意しなければならない、あなたを向上させることができるクエリの特定の状況に基づいてインデックスを追加する必要があるかもしれません。
文は何の修飾行を起こさないだろうここ値が強調表示されます。ここでは不可能。
唯一の唯一のインデックス値を使用して、リターンラインをもたらすことができる集計関数は、オプティマイザを意味します。Selectテーブルが離れて最適化
概要:
•クエリへの偏見からのトリガ、ストアドプロシージャまたはユーザー定義関数についてあなたを教えてくれませんEXPLAIN
キャッシュ考慮しませEXPLAIN•
•は、クエリの実行中に行わMySQLの最適化の作業を表示しませんEXPLAIN
•いくつかの統計見積もり、正確な値ではありません
•EXPALINのみを説明することができSELECT操作、他の操作は実行計画を見た後にSELECTのように書き換えることができます。