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

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 の使用

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

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

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

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

  4. [テーブル デザイナー] メニューの [インデックス/キー] をクリックします。

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

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

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

  8. [閉じる] をクリックします。

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

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

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

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

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

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

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

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

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

  8. [OK] をクリックします。

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

[トップに戻る] リンクで使用される矢印アイコン[Top]

Transact-SQL の使用

テーブルに非クラスター化インデックスを作成するには

  1. オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続します。

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

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

    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]