非クラスター化インデックスの作成
適用対象: SQL Server Azure SQL データベース
Azure SQL Managed Instance
SQL Server Management Studioまたは Transact-SQL を使用して、SQL Serverで非クラスター化インデックスを作成できます。 非クラスター化インデックスは、テーブルに格納されているデータとは別個の、選択された 1 つまたは複数の列を並べ替えるインデックス構造です。 非クラスター化インデックスを使用すると、基になるテーブルを検索するよりも迅速にデータを検索できるようになります。クエリの結果が非クラスター化インデックスのデータのみによって得られたり、非クラスター化インデックスによって基になるテーブル内の行を データベース エンジン に対して指定できたりする場合があります。 一般に、非クラスター化インデックスは、クラスター化インデックスで対応できない、頻繁に使用されるクエリのパフォーマンスを向上させたり、クラスター化インデックスのないテーブル (ヒープと呼ばれます) 内の行を探すために作成します。 1 つのテーブルまたはインデックス付きビューに複数の非クラスター化インデックスを作成できます。
はじめに
一般的な実装
非クラスター化インデックスは、次のように実装されます。
UNIQUE 制約
UNIQUE 制約を作成すると、既定では、一意な非クラスター化インデックスが作成され、UNIQUE 制約が適用されます。 テーブルにクラスター化インデックスが存在しない場合は、一意なクラスター化インデックスを指定できます。 詳細については、「 Unique Constraints and Check Constraints」を参照してください。
制約に依存しないインデックス
既定では、クラスター化オプションが指定されていない場合に、非クラスター化インデックスが作成されます。 非クラスター化インデックスは、1 つのテーブルに 999 個まで作成できます。 これには、PRIMARY KEY 制約または UNIQUE 制約によって作成されたインデックスを含みますが、XML インデックスは含みせん。
インデックス付きビューの非クラスター化インデックス
非クラスター化インデックスは、ビューで一意なクラスター化インデックスが作成されるまで作成できません。 詳細については、「 インデックス付きビューの作成」を参照してください。
セキュリティ
アクセス許可
テーブルまたはビューに対する ALTER 権限が必要です。 実行するには、 sysadmin 固定サーバー ロール、または db_ddladmin 固定データベース ロールおよび db_owner 固定データベース ロールのメンバーである必要があります。
SQL Server Management Studio を使用する
テーブル デザイナーを使用して非クラスター化インデックスを作成するには
オブジェクト エクスプローラーで、非クラスター化インデックスを作成するテーブルが格納されているデータベースをプラス記号をクリックして展開します。
[テーブル] フォルダーを展開します。
非クラスター化インデックスを作成するテーブルを右クリックし、 [デザイン]を選択します。
非クラスター化インデックスを作成する列を右クリックし、 [インデックス/キー] を選択します。
[インデックス/キー] ダイアログ ボックスで、 [追加]をクリックします。
[Selected Primary/Unique Key or Index (選択された主/一意キーまたはインデックス)] ボックスで、新しいインデックスを選択します。
グリッドで、 [CLUSTERED として作成]を選択し、プロパティ右のドロップダウン リストの [いいえ] を選択します。
[閉じる] をクリックします。
[ファイル] メニューの テーブル名の保存]をクリックします。
オブジェクト エクスプ ローラーを使用して非クラスター化インデックスを作成するには
オブジェクト エクスプローラーで、非クラスター化インデックスを作成するテーブルが格納されているデータベースをプラス記号をクリックして展開します。
[テーブル] フォルダーを展開します。
非クラスター化インデックスを作成するテーブルを展開します。
[インデックス] フォルダーを右クリックし、 [新しいインデックス] をポイントし、 [非クラスター化インデックス] を選択します。
[新しいインデックス] ダイアログ ボックスの [全般] ページで、 [インデックス名] ボックスに新しいインデックスの名前を入力します。
[インデックス キー列] で、 [追加] をクリックします。
テーブル名から列を選択] ダイアログ ボックスで、非クラスター化インデックスに追加する 1 つまたは複数のテーブル列のチェック ボックスをオンにします。
[OK] をクリックします。
[新しいインデックス] ダイアログ ボックスで、 [OK] をクリックします。
Transact-SQL の使用
テーブルに非クラスター化インデックスを作成するには
オブジェクト エクスプローラーで、AdventureWorks2019 がインストールされているデータベース エンジンのインスタンスに接続します。 「AdventureWorks サンプル データベース」を参照して AdventureWorks2019 をダウンロードします。
[標準] ツール バーの [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。
USE AdventureWorks2019; 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