簡潔なまとめ#
- インデックス:データの目次(本の目次のようなもの)であり、データエンジンがデータを高速に取得するためのデータ構造であり、時間を節約するための設計思想です。
- 分類:
- [データ構造] による分類:B + ツリーインデックス、ハッシュインデックス、全文検索インデックス
- InnoDB エンジンはハッシュインデックスをサポートしていません。
- 作成されたプライマリキーインデックスとセカンダリインデックスはデフォルトで B + ツリーインデックスを使用します。
- [物理ストレージ] による分類:クラスタインデックス(プライマリキーインデックス)、セカンダリインデックス(補助インデックス)
- プライマリキーインデックスの B + ツリーの葉ノードには実際のデータが格納されています。すべての完全なデータレコードは、プライマリキーインデックスの B + ツリーの葉ノードに格納されます。
- セカンダリインデックスの B + ツリーの葉ノードには主キーの値が格納されています。実際のデータではありません。
- セカンダリインデックスを使用してクエリを実行する場合:
- セカンダリインデックスの B + ツリーで見つかる場合、それはカバリングインデックスと呼ばれます(セカンダリインデックスの B + ツリーのみをクエリします)。
- 見つからない場合は、クラスタインデックスの B + ツリーを参照する必要があります。これをリフェレンスと呼びます(セカンダリインデックスの B + ツリーで主キーの値を取得し、実際のデータを取得するためにプライマリキーインデックスの B + ツリーを参照します)。
- セカンダリインデックスを使用してクエリを実行する場合:
- [フィールドの特性] による分類:プライマリキーインデックス、ユニークインデックス、一般的なインデックス、プレフィックスインデックス
- プライマリキーインデックス:プライマリキーフィールドに作成されたインデックスであり、テーブルごとに1 つのプライマリキーインデックスのみが許可され、インデックス列の値は空にできません。
- ユニークインデックス:UNIQUE フィールドに作成されたインデックスであり、テーブルごとに複数のユニークインデックスが許可され、インデックス列の値は一意である必要があり、空の値も許可されます。
- 一般的なインデックス:一般的なフィールドに作成されたインデックスであり、フィールドがプライマリキーである必要はありませんし、ユニークである必要もありません。
- プレフィックスインデックス:文字列型フィールドの最初のいくつかの文字に作成されたインデックスであり、フィールド全体に作成されたインデックスではありません。インデックスのストレージスペースを節約し、クエリの効率を向上させます。
- 許可されるフィールドのタイプ:char、varchar、binary、varbinary
- [フィールドの数] による分類:単一列インデックス、複合インデックス
- 単一列インデックス:単一の列に作成されたインデックス
- 複合インデックス:複数の列に作成されたインデックス
- [データ構造] による分類:B + ツリーインデックス、ハッシュインデックス、全文検索インデックス
- インデックスの適用例:
- フィールド値の一意性、例えば商品コード
- 頻繁に使用される where クエリの条件フィールド
- group by や order by で頻繁に使用されるフィールド
- インデックスの非適用例(逆例):
- where 条件、group by、order by で使用されないフィールド
- フィールドには大量の重複データが存在する(均等に分布している)場合、例えば性別
- テーブルのデータが少なすぎる場合
- 頻繁に更新されるフィールド
- インデックスの最適化:
- プレフィックスインデックスの最適化
- カバリングインデックスの最適化
- プライマリキーインデックスはできるだけ自動増分にする
- インデックス列を NOT NULL に設定する
- インデックスの無効化を防ぐ