mysql性能最適化シリーズ(二)---mysqlのインデックスを認識する

1824 ワード

B-Treeインデックス
B−Treeインデックスは、B−Treeデータ構造でデータを格納する.ほとんどのmysqlエンジンでは、このインデックスがサポートされています.また、各リーフノードには、次のリーフノードを指すポインタが含まれており、リーフノードの範囲を容易にすることができます.
なぜB-Treeインデックスはアクセス速度を速めることができますか?
ストレージエンジンは、必要なデータを取得するために全テーブルスキャンを必要としないため、インデックスのルートノードから検索を開始します.ルートノードのスロットにはサブノードへのポインタが格納され,ストレージエンジンはこれらのポインタに基づいて下位層に検索する.ノード・ページの値と検索する値を比較すると、適切なポインタが下層サブノードに入ることができます.
いつB-Treeインデックスを使うか
B−Treeインデックスは、全キー値、キー値範囲、またはキー接頭辞検索に適している.ここで、キー接頭辞検索は、最も左の接頭辞の検索にのみ適用されます.B-Treeは逐次組織が格納しているので、範囲データの検索に適しています.次のタイプに有効です.
1.全値一致
                  ,  name   age     ,  name=xxx and age=xx   。

2.一番左の接頭辞に一致するクエリ
          ,     ,       。

3.一致列接頭辞
             ,       A       。

4.一致範囲値
      1-1000    。

5.左前列を正確に一致させ、範囲を別の列に一致させる
       A  ,       B 。       ,       。

6、インデックスのみにアクセスするクエリー
btreeインデックス使用制限
1、検索はインデックスの一番左の列からのみ開始できます.2.クエリにカラムの範囲クエリがある場合、その右側のすべてのカラムにインデックスは使用できません.つまりlikeの後ろの列はすべてインデックス3を使用できず、インデックスの列をスキップできません.つまり、名前がAで年齢がBのデータは検索できません.
ハッシュ索引
ハッシュ・インデックスは、ハッシュ・テーブルに基づいて実装され、インデックスのすべてのカラムに正確に一致するクエリーのみが有効であり、各行のデータ・ストレージ・エンジンに対してすべてのインデックス・カラムに対してハッシュ・コードが計算されます.MySQLでは、Memoryエンジンが表示するハッシュインデックスのみがサポートされています.ハッシュインデックス自体は、対応するハッシュ値を格納するだけです.したがって、インデックスの構造は非常にコンパクトであり、ハッシュインデックスの検索速度も非常に速い.しかし、ハッシュインデックスにも制限があります.
1.ハッシュ・インデックスには、ハッシュ値とロー・ポインタのみが含まれ、フィールド値は格納されないため、インデックス内の値を使用してローの読み取りを回避することはできません.2.ハッシュインデックスデータはインデックス値順に格納されていないため、ソートにも使用できません.3.ハッシュインデックスは、ハッシュ値を計算するために常にインデックス列のすべての内容を使用するため、部分インデックス列マッチング検索もサポートしない.4.ハッシュ・インデックスは、等値比較クエリーのみをサポートします.5.ハッシュの競合が多い場合、インデックスのメンテナンス操作のコストが高くなります.
これらの制限のため、ハッシュインデックスは特定の場合にのみ適用され、ハッシュインデックスが適用されると、パフォーマンスの向上が顕著になります.
いくつかの空間データインデックス、全文インデックスはあまり概説されていません.