非クラスター化インデックスの作成

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

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 を使用する

テーブル デザイナーを使用して非クラスター化インデックスを作成するには

  1. オブジェクト エクスプローラーで、非クラスター化インデックスを作成するテーブルが格納されているデータベースをプラス記号をクリックして展開します。

  2. [テーブル] フォルダーを展開します。

  3. 非クラスター化インデックスを作成するテーブルを右クリックし、 [デザイン]を選択します。

  4. 非クラスター化インデックスを作成する列を右クリックし、[インデックス/キー] を選択します。

  5. [インデックス/キー] ダイアログ ボックスで、 [追加]をクリックします。

  6. [Selected Primary/Unique Key or Index (選択された主/一意キーまたはインデックス)] ボックスで、新しいインデックスを選択します。

  7. グリッドで、 [CLUSTERED として作成]を選択し、プロパティ右のドロップダウン リストの [いいえ] を選択します。

  8. [閉じる] を選択します。

  9. [ファイル] メニューの テーブル名の保存]をクリックします。

オブジェクト エクスプ ローラーを使用して非クラスター化インデックスを作成するには

  1. オブジェクト エクスプローラーで、非クラスター化インデックスを作成するテーブルが格納されているデータベースをプラス記号をクリックして展開します。

  2. [テーブル] フォルダーを展開します。

  3. 非クラスター化インデックスを作成するテーブルを展開します。

  4. [インデックス] フォルダーを右クリックし、[新しいインデックス] をポイントし、[非クラスター化インデックス] を選択します。

  5. [新しいインデックス] ダイアログ ボックスの [全般] ページで、 [インデックス名] ボックスに新しいインデックスの名前を入力します。

  6. [インデックス キー列]で、[追加] をクリックします。

  7. テーブル名から列を選択] ダイアログ ボックスで、非クラスター化インデックスに追加する 1 つまたは複数のテーブル列のチェック ボックスをオンにします。

  8. [OK] を選択します。

  9. [新しいインデックス] ダイアログ ボックスで、[OK] を選択します。

Transact-SQL の使用

Transact-SQL を使用してテーブルに非クラスター化インデックスを作成するには

  1. オブジェクト エクスプローラーで、AdventureWorks2022 をインストールしてあるデータベース エンジンのインスタンスに接続します。 サンプル データベースから AdventureWorks2022 をダウンロードできます。

  2. [標準] ツール バーの [新しいクエリ] をクリックします。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。

    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  
    

次のステップ