SQL Server クラスターインデックス と ノンクラスターインデックス
クラスターインデックス と ノンクラスターインデックス の違いは、物理的にデータが並べ替えられるかどうかの違いです。
クラスターインデックスは、インデックス順とデータの並び順が同じ。
ノンクラスターインデックスは、インデックス順とデータの並び順は同じではない。
クラスターインデックスを付けたらよいのは、
・検索で頻繁に使われる列
・100から200というように、範囲指定で検索される列
・データ種の少ない列
といったところでしょう。
あと、クラスターインデックスの利点は、なんと言ってもインデックスのサイズがほぼゼロと思ってよいので、ディスクサイズの制約がある場合には好都合です。
ありがちなのが、primary key をクラスターインデックスにしてしまうこと。
テーブル作成時に一緒に primary key を付け、次にインデックスを作成する場合、ノンクラスターインデックスしか作成できない。(テーブル1つにクラスターインデックスは1つだけしか作成できないため)
頻繁に検索されるのは primary key が付いた列ではないならば、テーブル作成後に クラスターインデックスを作成してから、primary key を付けよう。
1. create table order (id int not null, customer varchar(100) not null)
テーブルが作成される。まだインデックスも制約もない状態
2. create clustered index ix_order_cust on order (customer)
クラスターインデックスを customer列 につける。
3. alter table order add constraint PK_order primary key (id)
クラスターインデックスが既に存在するため、自動的にノンクラスターインデックスになる。
ただ、クラスターインデックスが付いた列のデータ変更が多い場合には、ディスクアクセスが多くなりすぎてしまうので、要注意。