SQL Server クラスタ化インデックス 非クラスタ化インデックス

SQL Server インデックスのクラスタ化とは

SQL Server でテーブル等にインデックスを作成する際に、クラスタ化インデックスにするか非クラスタ化インデックスにするか決めることができます。
その違いをメリット・デメリットを挙げて説明します。

その前にインデックス(INDEX)とは

その前にインデックスとは、検索対象のテーブルやビューに対して早く検索できるように、任意の列のデータもしくは複数の列のデータの組み合わせを基準にして、どのような順序で並んでいるかを管理している索引情報のことです。
インデックスを作る際に「この列の小さい順でインデックス作成」のように列や並びを指定してインデックスを作成作成します。

クラスター化インデックス

クラスタ化インデックスは、指定した条件で「実際のデータを並び替えて格納」します。
実際にデータを並び替えて格納しているため、テーブル毎にクラスター化インデックスは1つしか作成できません。
最もよく使われる検索条件に合わせてクラスタ化インデックスを作成します。

メリット

データが並び替えられて保存されているため、範囲データの抽出が速いです。
データが並び替えられて保存されているため、余分な領域を取りません。

デメリット

テーブル1つに対して1つしかクラスター化インデックスを作成できません。
データ挿入でデータ格納領域に対して溢れが起こった場合、その処理に時間が掛かります。

作成方法

インデックやPRIMARY KEYを作る時に「CLUSTERED」キーワードを使います。
例)create UNIQU CLUSTERED index インデック名
  primary key CLUSTERED (列名)

非クラスター化インデックス

非クラスタ化インデックスの場合は、テーブルの実際のデータの並び替えは実施せず(入れた順に格納)、インデックスで指定した列の値に対応するデータレコードへのポインタがインデックスファイルに格納されます。
ピンポイント検索は高速ですが、範囲検索はデータがバラバラに格納されているため、クラスタ化インデックスに比べ一般的に遅くなります。無いよりは早いですが……
メリット

1つのテーブルに複数のインデックスを作成できます。
データの挿入時、追記挿入になるためクラスタ化インデックスに比べて一般的に若干早くなります。

デメリット

上述の理由で範囲検索が遅いです。

まとめ

インデックスはデータ量が多くなると絶対に必要になります。
適切なインデックス作成は難しいですし、大規模システムでは特に当初の設計の見込み違いなどでデータ規模が変わるとインデックスを変える必要が出てくる可能性もあります。机上設計のみならず実地に試験をしてパフォーマンス管理を怠らないよに努めてください。