High Level Engineer Blog.

MySQLインデックス概要

Cover Image for MySQLインデックス概要
Kenichi Noshian
Kenichi Noshian

MySQLインデックス概要

この記事では、MySQLで使用できる各種インデックスの基本とその使い分け方について解説します。

ここでは、MySQLのデフォルトのストレージエンジンであるInnoDBについて解説します。

そもそもインデックスを貼らないとどうなるか

インデックスは特定のカラム値を素早く見つけるために使用される。インデックスが無いとデータベースは関連する行を見つけるために先頭から全ての行を見つかるまで走査することになります。そのためテーブルが肥大化するればするほどどんどん速度が低下していきます。しかしインデックスが張られていれば素早くデータの位置を特定することができます。

MySQLは以下の操作のためにインデックスを使用します。

  • WHERE句の最適化: WHERE句に一致する行を迅速に特定するためにインデックスが使用されます。
  • インデックスのプリフィクス利用: マルチカラムインデックスがある場合、MySQLのオプティマイザはインデックスの左端のプリフィクスを利用して行を特定します。
  • 結合の最適化: 結合操作では、他のテーブルから行を効率的に取得するためにインデックスが使用されます。
  • MIN()およびMAX()関数の最適化: 特定のカラムに対して設定されたインデックスを利用して、MIN()やMAX()の値を効率的に見つけることができます。

MySQLで利用できるインデックスの一覧

  1. 主キーインデックス(Primary Key Index)
    • 各テーブルに1つだけ設定可能で、各行を一意に識別する。
  2. ユニークインデックス(Unique Index)
    • 列の値がテーブルで一意であることを保証します。
  3. セカンダリインデックス(Secondary Index) / 非ユニークインデックス(Non-Unique Index)
    • 検索やソートの性能を向上させるために、主キー以外の列に設定されます。
  4. マルチカラムインデックス(Multi Column Index) / 複合インデックス
    • 2つ以上の列を組み合わせて作成されるインデックスです。
  5. フルテキストインデックス(Fulltext Index)
    • テキスト検索クエリの性能を向上させるために、大量のテキストデータを含む列に設定されます。
  6. 空間インデックス(Spatial Index)
    • 地理空間データの検索を効率化するために使用されます。