MySQLのクラスタ化インデックスと非クラスタ化インデックスの違い

MySQLのクラスタ化インデックスと非クラスタ化インデックスには、以下の違いがあります。

  1. 格納方法:クラスタインデックスの場合、データ行の順番とインデックスの順番は同じで、インデックスはデータ行を直接指し示す。非クラスタインデックスの場合、インデックスはデータ行から独立しており、インデックスの各エントリには、対応するデータ行へのポインタが含まれる。
  2. データアクセス:クラスタ化インデックスを利用したデータアクセスでは、インデックスから直接データ行にアクセスできるため、データ行は一緒に格納されています。非クラスタ化インデックスを利用したデータアクセスでは、まずインデックスからデータ行ポインタに対応するものを探し出し、その後ポインタを介してデータ行にアクセスする必要があるため、追加のIO操作が必要になります。
  3. クラスタ化インデックスでは、データ行の格納順序はインデックスの順序と同じなので、インデックス順に並べ替えるときには、特別なソート処理は必要ありません。非クラスタ化インデックスでは、インデックスとデータ行は独立しているので、インデックス順に並べ替えるときはソート処理が必要です。
  4. インデックスの更新:クラスタ型インデックスでは、データ行の挿入や更新は、データ行の順番がインデックスの順番と同じであるため、データ行の移動が発生する可能性があります。非クラスタ型インデックスでは、インデックスはデータ行とは独立しているため、データ行の挿入や更新はデータ行の移動を引き起こしません。

上記をまとめると、クラスタインデックスは範囲検索やインデックス順へのアクセスの多いデータに適合しますが、ノン クラスタインデックスは単一レコードのクエリーが多いデータに適合します。

bannerAds