Share via


非クラスタ化インデックスの作成

1 つのテーブルまたはインデックス付きビューに複数の非クラスタ化インデックスを作成できます。一般に、非クラスタ化インデックスは、頻繁に使用され、クラスタ化インデックスで対応できないクエリのパフォーマンスを向上するために作成します。

一般的な実装

非クラスタ化インデックスは、次のように実装されます。

  • PRIMARY KEY 制約と UNIQUE 制約
    PRIMARY KEY 制約を作成すると、テーブルにクラスタ化インデックスが存在せず、一意な非クラスタ化インデックスを指定しなかった場合、列に一意なクラスタ化インデックスが自動的に作成されます。主キー列には NULL 値を指定できません。
    UNIQUE 制約を作成すると、既定では、一意な非クラスタ化インデックスが作成され、UNIQUE 制約が適用されます。テーブルにクラスタ化インデックスが存在しない場合は、一意なクラスタ化インデックスを指定できます。詳細については、「PRIMARY KEY 制約」および「UNIQUE 制約」を参照してください。
  • 制約とは無関係のインデックス
    既定では、クラスタ化オプションが指定されていない場合に、非クラスタ化インデックスが作成されます。非クラスタ化インデックスは 1 つのテーブルに 249 個まで作成できます。これには PRIMARY KEY 制約または UNIQUE 制約によって作成されたインデックスを含みますが、XML インデックスは含みません。
  • インデックス付きビューの非クラスタ化インデックス
    非クラスタ化インデックスは、ビューで一意なクラスタ化インデックスが作成されるまで作成できません。詳細については、「インデックス付きビューの作成」を参照してください。

付加列インデックス

クエリに対応するために非クラスタ化インデックスを作成すると、インデックス定義に非キー列を含めることで、主要な検索対象列として使用されていないクエリ内の列にも対応できます。クエリ オプティマイザでは、インデックス内で必要なすべての列データを見つけることができ、テーブルまたはクラスタ化インデックスへのアクセスが発生しないため、パフォーマンスが向上します。詳細については、「付加列インデックス」を参照してください。

必要なディスク領域

非クラスタ化インデックスに必要なディスク領域の詳細については、「インデックスに必要なディスク領域の決定」を参照してください。

パフォーマンスに関する注意点

クエリで使用するすべての列がインデックスに含まれていることは重要ですが、不要な列を追加しないように注意してください。インデックス列やキーまたは非キーを追加しすぎると、次のようなパフォーマンス上の問題が発生することがあります。

  • 1 ページに収まるインデックス行が少なくなってディスク I/O が増加し、キャッシュの効率が低下します。
  • インデックスを格納するために、さらに多くのディスク領域が必要になります。
  • インデックス メンテナンスにより、基になるテーブルまたはインデックス付きビューに対する変更、挿入、更新、削除にかかる時間が長くなります。

データ変更によるパフォーマンスへの影響や追加ディスク領域の要件よりも、クエリのパフォーマンスから得られる利点の方が大きいかどうかを判断する必要があります。クエリのパフォーマンスの評価に関する詳細については、「クエリのチューニング」を参照してください。

テーブルの作成時に PRIMARY KEY 制約または UNIQUE 制約を作成するには

CREATE TABLE (Transact-SQL)

既存のテーブルに PRIMARY KEY 制約または UNIQUE 制約を作成するには

ALTER TABLE (Transact-SQL)

インデックスを作成するには

CREATE INDEX (Transact-SQL)

参照

概念

インデックスの作成 (データベース エンジン)
非クラスタ化インデックスのデザイン ガイドライン

ヘルプおよび情報

SQL Server 2005 の参考資料の入手