非クラスター化インデックスの作成
SQL Server 2012 では、SQL Server Management Studio または Transact-SQL を使用して非クラスター化インデックスを作成できます。 非クラスター化インデックスは、テーブルに格納されているデータとは別個の、選択された 1 つまたは複数の列を並べ替えるインデックス構造です。 非クラスター化インデックスを使用すると、基になるテーブルを検索するよりも迅速にデータを検索できるようになります。クエリの結果が非クラスター化インデックスのデータのみによって得られたり、非クラスター化インデックスによって基になるテーブル内の行をデータベース エンジンに対して指定できたりする場合があります。 一般に、非クラスター化インデックスは、クラスター化インデックスで対応できない、頻繁に使用されるクエリのパフォーマンスを向上させたり、クラスター化インデックスのないテーブル (ヒープと呼ばれます) 内の行を探すために作成します。 1 つのテーブルまたはインデックス付きビューに複数の非クラスター化インデックスを作成できます。
このトピックの内容
作業を開始する準備:
一般的な実装
セキュリティ
非クラスター化インデックスを作成するために使用するもの:
SQL Server Management Studio
Transact-SQL
作業を開始する準備
一般的な実装
非クラスター化インデックスは、次のように実装されます。
UNIQUE 制約
UNIQUE 制約を作成すると、既定では、一意な非クラスター化インデックスが作成され、UNIQUE 制約が適用されます。 テーブルにクラスター化インデックスが存在しない場合は、一意なクラスター化インデックスを指定できます。 詳細については、「UNIQUE 制約と CHECK 制約」を参照してください。
制約に依存しないインデックス
既定では、クラスター化オプションが指定されていない場合に、非クラスター化インデックスが作成されます。 非クラスター化インデックスは、1 つのテーブルに 999 個まで作成できます。 これには、PRIMARY KEY 制約または UNIQUE 制約によって作成されたインデックスを含みますが、XML インデックスは含みせん。
インデックス付きビューの非クラスター化インデックス
非クラスター化インデックスは、ビューで一意なクラスター化インデックスが作成されるまで作成できません。 詳細については、「インデックス付きビューの作成」を参照してください。
セキュリティ
権限
テーブルまたはビューに対する ALTER 権限が必要です。 実行するには、固定サーバー ロール sysadmin または、固定データベース ロール db_ddladmin および db_owner のメンバーである必要があります。
[Top]
SQL Server Management Studio の使用
テーブル デザイナーを使用して非クラスター化インデックスを作成するには
オブジェクト エクスプローラーで、非クラスター化インデックスを作成するテーブルが格納されているデータベースをプラス記号をクリックして展開します。
[テーブル] フォルダーを展開します。
非クラスター化インデックスを作成するテーブルを右クリックし、[デザイン] を選択します。
[テーブル デザイナー] メニューの [インデックス/キー] をクリックします。
[インデックス/キー] ダイアログ ボックスで、[追加] をクリックします。
[選択された主/一意キーまたはインデックス] ボックスで、新しいインデックスを選択します。
グリッドで、[CLUSTERED として作成] を選択し、プロパティ右のドロップダウン リストの [いいえ] を選択します。
[閉じる] をクリックします。
[ファイル] メニューの [table_name の保存] をクリックします。
オブジェクト エクスプ ローラーを使用して非クラスター化インデックスを作成するには
オブジェクト エクスプローラーで、非クラスター化インデックスを作成するテーブルが格納されているデータベースをプラス記号をクリックして展開します。
[テーブル] フォルダーを展開します。
非クラスター化インデックスを作成するテーブルを展開します。
[インデックス] フォルダーを右クリックし、[新しいインデックス] をポイントし、[非クラスター化インデックス] を選択します。
[新しいインデックス] ダイアログ ボックスの [全般] ページで、[インデックス名] ボックスに新しいインデックスの名前を入力します。
[インデックス キー列] で、[追加] をクリックします。
[table_name から列を選択] ダイアログ ボックスで、非クラスター化インデックスに追加する 1 つまたは複数のテーブル列のチェック ボックスをオンにします。
[OK] をクリックします。
[新しいインデックス] ダイアログ ボックスで、[OK] をクリックします。
[Top]
Transact-SQL の使用
テーブルに非クラスター化インデックスを作成するには
オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続します。
[標準] ツール バーの [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、[実行] をクリックします。
USE AdventureWorks2012; GO -- Find an existing index named IX_ProductVendor_VendorID and delete it if found. IF EXISTS (SELECT name FROM sys.indexes WHERE name = N'IX_ProductVendor_VendorID') DROP INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor; GO -- Create a nonclustered index called IX_ProductVendor_VendorID -- on the Purchasing.ProductVendor table using the BusinessEntityID column. CREATE NONCLUSTERED INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor (BusinessEntityID); GO
詳細については、「CREATE INDEX (Transact-SQL)」を参照してください。
[Top]