Mysql最適化-インデックスタイプの紹介


インデックスには多くの種類があり、異なるシーンでより良いパフォーマンスを提供することができます.Mysqlでは、インデックス時にサーバ層ではなくエンジン層を記憶する.したがって、統一的なインデックス基準はない.異なるストレージエンジンのインデックスの動作方式は異なる.複数のストレージエンジンが同じ種類のインデックスをサポートするも、その下位層の実装は異なる可能性が高い.まず、Mysqlがサポートするインデックスのタイプを見てみましょう.それらの長所と短所.
1.B-Treeインデックス
Btreeは、ディスク等の外部記憶装置のために設計するバランスルックアップツリーである.create tableの場合、インデックスタイプが指定されていない場合は、デフォルトでこのタイプが使用されます.ほとんどのmysqlエンジンはこのインデックスをサポートしています.異なるストレージエンジンはb-treeインデックスを異なる方法で使用する.性能もそれぞれ異なり、それぞれに優劣がある.例えばMyISAMは、プレフィックス圧縮技術を用いるインデックスをより小さくする.InnoDBはソースデータ形式で記憶する.さらに、MyISAMは、データの物理的な位置を介してインデックス行を参照する、InnoDBは、プライマリ・キーに基づいてインデックス行を参照する.B-treeは、全ての値が順番に記憶することを意味する.各葉のページから根までの距離は同じである.B-treeインデックスは、ストレージエンジンが全テーブルをスキャンする必要がなくなり、代わりにインデックスのルートノードを介して検索するため、データへのアクセス速度を速めることができる.
B-treeインデックスがサポートするクエリーのタイプ:
•     .               .
•       .              n      .
•      .

B-treeインデックスの制限:
•       .                       ,        .
•          .       A,B,C,D,         C, Mysql       A,B .

これらの制限により、パフォーマンスを最適化する際に、異なるタイプのクエリー要件を満たすために、同じカラムである順序の異なるインデックスを作成する必要がある場合がある.
2.Hash(ハッシュ)インデックス
ハッシュインデックスはハッシュテーブルに基づいて実現する.インデックスに正確に一致するすべてのカラムのクエリーのみが有効です.各ローのデータについて、ハッシュインデックスはすべてのインデックス列に基づいてhash codeを計算する.ハッシュインデックスは、すべてのhash codeをインデックスに格納とともに、各データ行へのポインタをハッシュテーブルに格納する.
インデックス自体はhash codeのみを格納ため、インデックスの構造は非常にコンパクトであり、ハッシュテーブルの速度も非常に速い.しかし.ハッシュ・テーブルにも制限があります.
•      .
•               .
•        ,         .
•                .
•             ,         .

これらの制限により、ハッシュテーブルは特定の場合にのみ適用する.ハッシュインデックスが適用すると、パフォーマンスの向上が著しい.例えば、複数のテーブルクエリを関連付けるときの中間テーブルでは、ハッシュインデックスがそのニーズに非常に適している.
3.R-tree(空間データ索引)
MyISAMは空間データインデックスをサポートする、地理データ記憶として利用できる.現在、MysqlのGISに対するサポートは完備していない.ほとんどの人はこの特性を使用しません
4.全文索引
全文インデックスは特殊なタイプのインデックスであり、インデックスの値を直接比較するのではなく、テキストのキーワードを比較する.簡単なwhereクエリーではなく、検索エンジンに似ています.