myesn

myEsn2E9

hi
github

MySQL インデックス

簡潔なまとめ#

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

参考#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。