MySQL(Mariadb)まとめ4-MySQLインデックスとexplain

2611 ワード

MySQLのインデックス
基本法則:インデックスは、クエリー条件として使用するフィールドに構築されるべきである.
索引の種類:
  • B+Treeインデックス:各リーフノードからルートノードまでの距離が同じ順序で格納されます.左接頭辞インデックスは、クエリー範囲クラスのデータに適している.
  • B-Treeインデックスのクエリタイプを使用できます.
  • フルキー値:
  • キー値範囲:
  • キー接頭辞:
  • B-Treeインデックスを使用するシーンには適していません.
  • 一番左の列からでなければ、インデックスは無効です.
  • インデックス内のカラムをスキップすることはできません.
  • クエリー内のカラムが範囲クエリーであることを避けると、右側のカラムはインデックスを使用してクエリーを最適化できません.


  • Hashインデックス:ハッシュテーブルに基づいて実装され、特にインデックスクロックに一致するすべてのカラムに使用される.
  • メモリのみ;エンジンは明示的なhashインデックスをサポートします.
  • 適用シーン:
  • は、=,IN(),<=>を含む等値比較クエリーのみをサポートします.

  • hashインデックスに不適切なシーン:
  • に格納された値は順序であるため、順序クエリには実用的ではない.
  • では、ファジイクエリはサポートされていません.


  • 空間インデックス(R-Tree):
  • MyISAMは
  • をサポート
  • 全文インデックス(FULLTEXT):
  • テキストでキーワードを検索します.


  • インデックスの利点:
  • インデックスは、サービスがスキャンする必要があるデータ量を低減し、IO回数を減少させることができる.
  • インデックスは、サーバがテンポラリ・テーブルのソートと使用を回避するのに役立ちます.
  • インデックスは、ランダムI/OをシーケンスI/Oに変換するのに役立ちます.

  • 高性能インデックスポリシー:
  • 独立して列を使用し、演算に参加することをできるだけ避ける.
  • 左接頭辞インデックス:インデックスがフィールドの左側に構築された文字の数をインデックス選択で評価します.
  • インデックス選択性:重複しないインデックス値とデータテーブルのレコード総数の比.

  • マルチカラムインデックス:AND操作時にマルチカラムインデックスを使用するのに適しています.
  • 適切なインデックス順序を選択:選択性が最も高いものを左側に配置する.

  • 冗長性と重複インデックス:
  • 悪いインデックス使用ポリシー;

  • EXPLAINによるインデックスの有効性の分析EXPLAIN SELECT clauseは、クエリー・オプティマイザがクエリーを実行する方法を表示するために、クエリー実行計画の利息を取得する.
    出力:
  • id-現在のクエリー文時計、各SELECT文の番号;
  • の複雑なタイプのクエリーには、次の3つがあります.
  • 単純サブクエリ;
  • FROMのサブクエリに使用される.
  • 共同照会:UNION;

  • 注意:UNIONクエリの分析は、追加の匿名のテンポラリ・テーブルが表示されます.

  • select_type
  • 簡単なクエリはSIMPLEです.
  • 複雑なクエリー:
  • SUBQUERY:単純サブクエリ;
  • DERIVED:FROMのサブクエリに使用されます.
  • UNION:UNION文の1番目以降のSELECT文;
  • UNION RESULT:匿名仮表;


  • table:SELECT文に関連付けられたテーブル;
  • type:関連タイプ、またはアクセスタイプ、すなわちMySQLがテーブル内のローをどのように検索するかを決定する方法.
  • ALL:全表スキャン;
  • index:インデックスの順序に従って全テーブルスキャンを行う;Extra列に「Using index」が表示されると、全テーブルインデックスではなく上書きインデックスが使用されます.
  • range:インデックスに基づいて範囲スキャンを実現する範囲制限がある.
  • ref:縮図に基づいて、テーブル内の単一の値に一致するすべてのローを返します.
  • eq_ref:1つのローのみが返されますが、参照値と追加で比較する必要があります.
  • const,system:単一のローを直接返します.

  • possible_keys:クエリーで使用される可能性のあるインデックス;
  • key:クエリークロックで使用されるインデックス;
  • key_len:インデックスで使用されるバイト数;
  • ref:keyフィールドで表されるインデックスを使用してクエリーを完了するときのすべてのカラムまたは定数量.
  • rows:MySQLは、すべてのターゲット行を見つけるために読み込む必要がある行の数を推定します.
  • Extra:追加情報