クラスタードインデックスとは?
くらすたーどいんでっくす
クラスタードインデックスとは、テーブルのデータ行そのものをインデックスキーの順番に物理的に並べて格納するデータベースの索引方式です。
クラスタードインデックス(Clustered Index)とは、リレーショナルデータベースにおいてテーブルの物理的なデータ格納順序をインデックスキーの値に一致させる索引構造です。データ行とインデックスが一体化しているため、インデックスを辿ると同時にデータ本体にアクセスできます。
通常のインデックス(非クラスタードインデックス)はデータとは別の領域にキー値とデータの場所(ポインタ)を保持しますが、クラスタードインデックスではインデックスの葉ノードにデータ行そのものが含まれます。B+ツリー構造を使って実装されることが多く、SQL ServerやMySQLのInnoDB(主キーが自動的にクラスタードインデックスになる)が代表的な採用例です。
クラスタードインデックスの主な特徴は以下のとおりです。
- 主キーや頻繁に範囲検索されるカラムに設定すると、連続するデータを効率よく読み出せる
- テーブル1つにつき1つだけしか作成できない(物理順序は1通りのため)
- 挿入・更新時にデータの物理的な並び替えが発生し、断片化(フラグメンテーション)が起きやすい
- 非クラスタードインデックスからのルックアップは、クラスタードインデックスを経由するため2段階アクセスになる
主キーが連番(AUTO_INCREMENT)の場合は末尾への追加が多く断片化しにくい一方、UUIDのようなランダム値を主キーにすると挿入のたびに並べ替えが生じパフォーマンスが低下します。適切なカラム選択がデータベース設計の重要なポイントです。
使い方・例文
MySQLのInnoDBテーブルで主キーを「注文日時」に設定すると、データが日時順に物理配置されるため「先月の注文一覧」のような範囲クエリが高速になる一方、同テーブルへの非クラスタードインデックスでの検索は主キーを経由する2段階アクセスとなります。
この用語をシェア
最終更新: