付加列インデックスの作成
このトピックでは、SQL Server Management Studioまたは Transact-SQL を使用して、SQL Server 2014 の非クラスター化インデックスの機能を拡張するために、含まれる (またはキー以外の) 列を追加する方法について説明します。 非キー列を含めることにより、より多くのクエリをカバーする非クラスター化インデックスを作成できます。 これは、非キー列には次の利点があるためです。
非キー列には、インデックス キー列として許可されていないデータ型を設定できる。
インデックス キー列の数やインデックス キーのサイズを計算するときに、 データベース エンジン では非キー列が考慮されない。
クエリ内のすべての列が、キー列または非キー列としてインデックスに含まれるているとき、非キー列を含むインデックスにより、クエリ パフォーマンスが大幅に向上します。 クエリ オプティマイザーではインデックス内のすべての列値を参照できるので、テーブルやクラスター化インデックスのデータにアクセスすることがなく、ディスク I/O 操作が少なくて済むため、パフォーマンスが向上します。
Note
クエリによって参照されるすべての列がインデックスに含まれているときは、一般的に、そのインデックスは クエリをカバーしていると呼ばれます。
このトピックの内容
作業を開始する準備:
以下を使用して非キー列を含むインデックスを作成するには:
はじめに
設計上の推奨事項
検索や参照に使用される列のみがキー列になるように、大きなサイズのインデックス キーを使用して、非クラスター化インデックスを設計し直します。 クエリをカバーする他のすべての列を非キー列にします。 その結果、クエリをカバーするために必要なすべての列を含むことができますが、インデックス キー自体は小さく、効率的です。
非クラスター化インデックスに非キー列を含め、現在のインデックス サイズの制限 (最大 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)」を参照してください。