非クラスター化インデックスの作成
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Microsoft Fabric SQL Database
SQL Server では、SQL Server Management Studio または Transact-SQL を使用して主キーを定義できます。 非クラスター化インデックスは、テーブルに格納されているデータとは別個の、選択された 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 (選択された主/一意キーまたはインデックス)] ボックスで、新しいインデックスを選択します。
グリッドで、[クラスター化として作成] を選択し、プロパティ右のドロップダウン リストの [いいえ] を選択します。
[閉じる] を選択します。
[ファイル] メニューの table_name を [保存] を選択します。
オブジェクト エクスプ ローラーを使用して非クラスター化インデックスを作成するには
オブジェクト エクスプローラーで、非クラスター化インデックスを作成するテーブルが格納されているデータベースをプラス記号をクリックして展開します。
[テーブル] フォルダーを展開します。
非クラスター化インデックスを作成するテーブルを展開します。
[インデックス] フォルダーを右クリックし、[新しいインデックス] をポイントし、[非クラスター化インデックス] を選択します。
[新しいインデックス] ダイアログ ボックスの [全般] ページで、 [インデックス名] ボックスに新しいインデックスの名前を入力します。
[インデックス キー列] で [追加] を選択します。
[table_name から列を選択] ダイアログ ボックスで、非クラスター化インデックスに追加する 1 つまたは複数のテーブル列のチェック ボックスをオンにします。
[OK] を選択します。
[新しいインデックス] ダイアログ ボックスで、[OK] を選択します。
Transact-SQL の使用
Transact-SQL を使用してテーブルに非クラスター化インデックスを作成するには
オブジェクト エクスプローラーで、
AdventureWorks2022
をインストールしてあるデータベース エンジンのインスタンスに接続します。 サンプル データベースからAdventureWorks2022
をダウンロードできます。標準バーで、 [新しいクエリ] を選択します。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] を選択します。
USE AdventureWorks2022; 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