ファイル グループへのインデックスの格納

インデックスの設計について考えるときは、データベースに関連付けられたファイル グループ上にインデックスを配置することを検討する必要があります。ファイル グループまたはパーティション構成を慎重に選択することで、クエリのパフォーマンスを向上できる場合があります。

既定では、インデックスが作成されるベース テーブルと同じファイル グループにインデックスも格納されます。パーティション分割されていないクラスタ化インデックスおよびベース テーブルは、常に同じファイル グループに存在します。しかし、次の操作を実行できます。

  • ベース テーブルのファイル グループ以外のファイル グループに非クラスタ化インデックスを作成する。

  • 複数のファイル グループにまたがるクラスタ化インデックスおよび非クラスタ化インデックスをパーティション分割する。

  • あるファイル グループから別のファイル グループにテーブルを移動する。この操作を行うには、クラスタ化インデックスを削除して DROP INDEX ステートメントの MOVE TO 句に新しいファイル グループまたはパーティション構成を指定するか、DROP_EXISTING 句を指定した CREATE INDEX ステートメントを使用します。

異なるファイル グループに非クラスタ化インデックスを作成した場合、そのファイル グループが独自のコントローラを持つ異なる物理ドライブを使用していると、パフォーマンスの向上を実現できます。データおよびインデックス情報は、複数のディスク ヘッドにより並列で読み込めるようになります。たとえば、ファイル グループ f1Table_A とファイル グループ f2Index_A が同じクエリで使用される場合、両ファイル グループが完全に競合することなく使用されるため、パフォーマンスが向上します。しかし、クエリによって Table_A がスキャンされる場合でも、Index_A が参照されていないと、ファイル グループ f1 のみが使用されます。この場合、パフォーマンスは向上しません。

アクセスの種類や実行のタイミングは事前には予測できないため、テーブルとインデックスをすべてのファイル グループにわたって分散しておくことをお勧めします。すべてのデータとインデックスが、すべてのディスクにわたって均等に分散されていれば、どのような方法でデータへのアクセスが行われても、確実にすべてのディスクがアクセスされます。この方法は、システム管理者にとっても簡単な方法になります。

複数のファイル グループでのパーティション分割

複数のファイル グループにわたるクラスタ化インデックスおよび非クラスタ化インデックスをパーティション分割することもできます。パーティション インデックスは、パーティション関数に基づいて、行方向または行ごとにパーティション分割されます。パーティション関数では、パーティション分割列と呼ばれる特定の列の値に基づいて、一連のパーティションに各行をどのようにマップするのかを定義します。パーティション構成では、一連のファイル グループにパーティションをマップするように指定します。

インデックスをパーティション分割すると、次のような利点があります。

  • 大きなインデックスがより管理しやすくなるスケーラブルなシステムを提供できる。たとえば OLTP システムで、大きなインデックスを扱うパーティション対応のアプリケーションを実装できます。

  • クエリをより高速かつ効率的に実行できる。クエリからインデックスのいくつかのパーティションへアクセスしたときに、クエリ オプティマイザでは個別のパーティションを同時に処理し、クエリによる影響を受けないパーティションを除外できます。

詳細については、「パーティション テーブルとパーティション インデックス」を参照してください。

特定のファイル グループに新しいインデックスを作成するには

CREATE INDEX

既存のインデックスまたはテーブルを別のファイル グループに移動するには

既存のインデックスを別のファイル グループに移動する方法 (SQL Server Management Studio)

DROP INDEX MOVE TO

CREATE INDEX WITH DROP_EXISTING