適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric の SQL データベース
SQL Server では、SQL Server Management Studio または Transact-SQL を使用して主キーを定義できます。 非クラスター化インデックスは、テーブルに格納されているデータとは別個の、選択された 1 つまたは複数の列を並べ替えるインデックス構造です。 非クラスター化インデックスを使用すると、基になるテーブルを検索するよりも迅速にデータを検索できるようになります。クエリの結果が非クラスター化インデックスのデータのみによって得られたり、非クラスター化インデックスによって基になるテーブル内の行をデータベース エンジンに対して指定できたりする場合があります。 一般に、非クラスター化インデックスは、クラスター化インデックスで対応できない、頻繁に使用されるクエリのパフォーマンスを向上させたり、クラスター化インデックスのないテーブル (ヒープと呼ばれます) 内の行を探すために作成します。 1 つのテーブルまたはインデックス付きビューに複数の非クラスター化インデックスを作成できます。
開始する前に
一般的な実装
非クラスター化インデックスは、次のように実装されます。
UNIQUE制約**UNIQUE制約を作成すると、一意の非クラスター化インデックスが作成され、既定でUNIQUE制約が適用されます。 テーブルにクラスター化インデックスがまだ存在しない場合は、一意のクラスター化インデックスを指定できます。 詳細については、「UNIQUE 制約と CHECK 制約」を参照してください。制約に依存しないインデックス
既定では、クラスター化が指定されていない場合、非クラスター化インデックスが作成されます。 非クラスター化インデックスは、1 つのテーブルに 999 個まで作成できます。 これには、
PRIMARY KEY制約またはUNIQUE制約によって作成されたすべてのインデックスが含まれますが、XML インデックスは含まれません。インデックス付きビューの非クラスター化インデックス
非クラスター化インデックスは、ビューで一意なクラスター化インデックスが作成されるまで作成できません。 詳細については、「インデックス付きビューの作成」を参照してください。
セキュリティ
Permissions
テーブルまたはビュー 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 を使用してテーブルに非クラスター化インデックスを作成する
オブジェクト エクスプローラーで、
AdventureWorks2025をインストールしてあるデータベース エンジンのインスタンスに接続します。AdventureWorks2025から をダウンロードできます。標準バーで、 [新しいクエリ] を選択します。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] を選択します。
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