このトピックでは、SQL Server Management Studio または Transact-SQL を使用して、SQL Server 2014 で非クラスター化インデックスの機能を拡張するために含まれる (またはキー以外の) 列を追加する方法について説明します。 非キー列を含めることにより、より多くのクエリをカバーする非クラスター化インデックスを作成できます。 これは、非キー列には次の利点があるためです。
非キー列には、インデックス キー列として許可されていないデータ型を設定できる。
インデックス キー列の数やインデックス キーのサイズを計算するとき、データベース エンジンでは、これらが考慮されません。
キー以外の列を持つインデックスは、クエリのすべての列がキー列または非キー列としてインデックスに含まれている場合に、クエリのパフォーマンスを大幅に向上させることができます。 クエリ オプティマイザーではインデックス内のすべての列値を参照できるので、テーブルやクラスター化インデックスのデータにアクセスすることがなく、ディスク I/O 操作が少なくて済むため、パフォーマンスが向上します。
注
インデックスにクエリによって参照されるすべての列が含まれている場合、通常は クエリをカバーする列と呼ばれます。
このトピックについて
作業を開始する準備:
キー以外の列を含むインデックスを作成するには、次を使用します。
開始する前に
設計上の推奨事項
検索や参照に使用される列のみがキー列になるように、大きなサイズのインデックス キーを使用して、非クラスター化インデックスを設計し直します。 クエリをカバーする他のすべての列を非キー列にします。 その結果、クエリをカバーするために必要なすべての列を含むことができますが、インデックス キー自体は小さく、効率的です。
非クラスター化インデックスに非キー列を含めて、現在のインデックス サイズの制限である最大 16 個のキー列と 900 バイトの最大インデックス キー サイズを超えないようにします。 インデックス キー列の数やインデックス キーのサイズを計算するときに、 データベース エンジンでは非キー列が考慮されません。
制限事項と制約条件
非キー列は、非クラスター化インデックスでのみ定義できます。
text
、ntext
、image
を除くすべてのデータ型は、非キー列として使用できます。決定論的で正確または不正確な計算列は、キー以外の列にすることができます。 詳細については、「 計算列のインデックス」を参照してください。
計算列のデータ型が非キー インデックス列として許可されている限り、
image
、ntext
、およびtext
のデータ型から派生した計算列は、非キー列にすることができます。テーブルのインデックスが最初に削除されない限り、テーブルから非キー列を削除することはできません。
次の操作以外に、非キー列は変更できません。
列の NULL 値の許容を NOT NULL から NULL に変更する。
varchar
、nvarchar
、またはvarbinary
の各列の長さを拡張する。
安全
権限
テーブルまたはビューに対する ALTER 権限が必要です。 実行するには、 sysadmin 固定サーバー ロール、または db_ddladmin 固定データベース ロールおよび db_owner 固定データベース ロールのメンバーである必要があります。
SQL Server Management Studio の使用
キー以外の列を含むインデックスを作成するには
オブジェクト エクスプローラーで、プラス記号をクリックして、キー以外の列を含むインデックスを作成するテーブルを含むデータベースを展開します。
プラス記号をクリックして [テーブル] フォルダーを展開します。
プラス記号をクリックして、キー以外の列を含むインデックスを作成するテーブルを展開します。
[インデックス] フォルダーを右クリックし、[新しいインデックス] をポイントして、[非クラスター化インデックス...] を選択します。
[ 新しいインデックス ] ダイアログ ボックスの [ 全般 ] ページで、[インデックス名] ボックスに新しいインデックスの 名前 を入力します。
[ インデックス キー列 ] タブで、[ 追加...] をクリックします。
[ table_nameから列を選択] ダイアログ ボックス で、インデックスに追加するテーブルの列のチェック ボックスまたはチェック ボックスをオンにします。
OK をクリックします。
含まれる列 タブで 追加... をクリックします。
[ table_nameから列を 選択] ダイアログ ボックスで、インデックスに非キー列として追加するテーブル列のチェック ボックスまたはチェック ボックスをオンにします。
OK をクリックします。
[ 新しいインデックス ] ダイアログ ボックスで、[OK] をクリック します。
Transact-SQL の使用
キー以外の列を含むインデックスを作成するには
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
標準バーで [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。
USE AdventureWorks2012; GO -- Creates a nonclustered index on the Person.Address table with four included (nonkey) columns. -- index key column is PostalCode and the nonkey columns are -- AddressLine1, AddressLine2, City, and StateProvinceID. CREATE NONCLUSTERED INDEX IX_Address_PostalCode ON Person.Address (PostalCode) INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID); GO
詳細については、「 CREATE INDEX (Transact-SQL)」を参照してください。