インデックスとクエリー最適化シリーズの2---explain理解

3341 ワード

sql文を検出する最も直接的な方法は、文の前にexplainを来ることです.したがって、explainをうまく使うことで、文が合理的かどうか、最適化と改善に値するところがあるかどうかをよりよく理解することができます.
Exclianの使い方:explain select*from table_goods
explainの後には一般的にいくつかのパラメータがあります.
1 id
これは無視できる
2select_type
クエリーのタイプ
SIMPLECT単純SELECT(UNIONまたはサブクエリを使用しない)o PRIMARY最外面のSELECT o UNIONのうち2番目またはそれ以降のSELECT文o DEPENDENT UNIONのうち2番目またはそれ以降のSELECT文は、外面のクエリo UNION RESULT UNIONの結果に依存します.o SUBQUERYサブクエリの最初のSELECT o DEPENDENT SUBQUERYサブクエリの最初のSELECTは、外部クエリo DERIVED導出テーブルのSELECT(FROMサブクエリ)3 table

4type
データへのアクセスを問い合わせる方法.マニュアルでは、最適なタイプから最悪のタイプに至るまで、結合方法と呼ばれています.
System:テーブルは1行のみで、constの特例です
const:最大1行、プライマリ・キーまたは一意のインデックスマッチング定数に多く使用される場合、select*from table where primary_id=1で、プライマリキーでない行を使用するとconstではありません
eq_ref:左接続など、テーブルを接続するときに多く使用されます.左テーブルの各行のデータが右テーブルから1行しか一致しない場合がこのタイプです.
ref:例えば左接続では、左テーブルの各行のデータが右テーブルからデータに一致します(1行以上でよい).あるいは、select*from table where colum='x'columはプライマリ・キーまたは一意のインデックスではなく、左接続の最初のステップの左テーブルとwhere条件が同等であることが理解される.右の時計を調べに来たんだ
ref_or_null:この結合タイプはrefと似ていますが、MySQLを追加するとNULL値を含む行を特定できます.しかし、nullのあるカラムにインデックス(ピット)を作成することは一般的に推奨されません.
index_merge:インデックスマージ、mysql 5の後に複数のインデックスを使用できます.インデックスの使用状況は内蔵アルゴリズムに基づいてマージされます.この最適化が発生すると、これが表示されます.
unique_subquery:このタイプは、次の形式のINサブクエリのref:value IN(SELECT primary_key FROM single_table WHERE some_expr)unique_を置き換えます.subqueryはインデックス検索関数であり、サブクエリを完全に置き換えることができ、より効率的です.
index_subquery:
この結合タイプはunique_に似ています.subquery.INサブクエリは置換できますが、次のサブクエリのユニークでないインデックスにのみ適用されます.
value IN (SELECT key_column FROM single_table WHERE some_expr)

range:指定した範囲のローのみを取得し、インデックスを使用してローを選択します.
key列には、どのインデックスが使用されているかが表示されます.
key_lenには、使用するインデックスの最長キー要素が含まれます.このタイプでは
ref列は
NULL.
index:インデックススキャンを使用してソートします.すなわち、インデックスはデータを検索し、ソートします.orderbyの場合、インデックスソートを使用するかどうかはselectのフィールドとは関係ありませんが、インデックス上書きはselectフィールドに関係します.
ALL:全テーブルスキャン、全テーブルスキャンは極力避けるべき
5 possible_keys
使用可能なインデックス
6 key
実際に使用されたインデックスです.文はuse indexを使用してインデックスを強制的に使用できます.
7  key_len
インデックスの長さは、連合インデックスを計算し、最左の原則を使用するかどうかを判断し、計算方法に空きがあるかどうかを判断するために使用できます(ピット)
8 ref
ref列は、keyとともにテーブルから行を選択する列または定数を表示します.
9 rows rows列には、MySQLがクエリーを実行するときにチェックする必要があると考えているローの数が表示されます.これにより,文の実行効率も分かる.
10 Extra
mysql解決クエリーの詳細も含まれており、文の実行効率を判断する良いパラメータでもあります.
    Distinct
    Not exists
    range checked for each record (index map:#)
Using filesortファイルのソートを使用しているので、using filesortを避ける必要があります.
Using temporaryは、結果を格納するために一時テーブルを作成する必要があります.orderbyとgroupbyは、ファイルのソートと一時テーブルの回避に努めます.
Using indexは上書きインデックスを使用しています
using whereストレージエンジンから戻った後、サーバ層でwhere条件を使用してデータを再フィルタしました.
    Using sort_union(...),Using union(...),Using intersect(...)
    Using index for group-by
熟練したexplainを使用して、各重点パラメータの意味を理解して、毎回文を書き終わった後にすべて文が前にexplainをプラスして性能の検査を行った後に確定して更に修正する必要がないことを確定してからオンラインになるのはとても良い習慣です