次の方法で共有


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

SQL Server Management Studio または Transact-SQL を使用して、SQL Server 2014 のテーブルにクラスター化インデックスを作成できます。 例外はほとんどありませんが、すべてのテーブルにクラスター化インデックスが必要です。 クエリのパフォーマンスを向上させるだけでなく、クラスター化インデックスを必要に応じて再構築または再構成して、テーブルの断片化を制御できます。 クラスター化インデックスは、ビューに作成することもできます。 (クラスター化インデックスは、クラスター 化インデックスと非クラスター化インデックスの説明に関するトピックで定義されています)。

このトピックについて

開始する前に

一般的な実装

クラスター化インデックスは、次の方法で実装されます。

  • PRIMARY KEYおよびUNIQUE制約

    PRIMARY KEY 制約を作成すると、テーブルにクラスター化インデックスがまだ存在せず、一意の非クラスター化インデックスを指定しない場合、列または列に一意のクラスター化インデックスが自動的に作成されます。 主キー列では NULL 値を許可できません。

    UNIQUE 制約を作成すると、一意の非クラスター化インデックスが作成され、既定で UNIQUE 制約が適用されます。 テーブルにクラスター化インデックスがまだ存在しない場合は、一意のクラスター化インデックスを指定できます。

    制約の一部として作成されたインデックスには、制約名と同じ名前が自動的に付けられます。 詳細については、「 主キー制約と外部キー制約 」および「 一意制約」および「Check 制約」を参照してください

  • 制約に依存しないインデックス

    非クラスター化主キー制約が指定されている場合は、主キー列以外の列にクラスター化インデックスを作成できます。

制限事項と制約条件

  • クラスター化インデックス構造を作成するときは、それぞれのファイルとファイル グループに、古い (ソース) 構造体と新しい (ターゲット) 構造体の両方のディスク領域が必要です。 完全なトランザクションがコミットされるまで、古い構造体の割り当てが解除されません。 並べ替えのための追加の一時ディスク領域も必要になる場合があります。 詳細については、「 インデックス DDL 操作のディスク領域の要件」を参照してください。

  • クラスター化インデックスが複数の既存の非クラスター化インデックスを持つヒープ上に作成される場合は、行識別子 (RID) ではなくクラスタリング キー値が含まれるように、すべての非クラスター化インデックスを再構築する必要があります。 同様に、クラスター化インデックスが複数の非クラスター化インデックスを持つテーブルで削除された場合、非クラスター化インデックスはすべて DROP 操作の一部として再構築されます。 大きなテーブルでは、これにはかなりの時間がかかる場合があります。

    大きなテーブルでインデックスを作成する場合は、クラスター化インデックスから始めて、非クラスター化インデックスを作成することをお勧めします。 既存のテーブルにインデックスを作成する場合は、ONLINE オプションを ON に設定することを検討してください。 ON に設定すると、長期的なテーブル ロックは保持されません。 これにより、基になるテーブルに対するクエリまたは更新を続行できます。 詳しくは、「 Perform Index Operations Online」をご覧ください。

  • クラスター化インデックスのインデックス キーには、ROW_OVERFLOW_DATAアロケーション ユニットに既存のデータを含む varchar 列を含めることはできません。 クラスター化インデックスが varchar 列に作成され、既存のデータがIN_ROW_DATA割り当て単位にある場合、行外にデータをプッシュする列に対する後続の挿入または更新アクションは失敗します。 行オーバーフロー データを含むテーブルに関する情報を取得するには、 sys.dm_db_index_physical_stats (Transact-SQL) 動的管理機能を使用します。

安全

権限

テーブルまたはビューに対する ALTER 権限が必要です。 実行するには、 sysadmin 固定サーバー ロール、または db_ddladmin 固定データベース ロールおよび db_owner 固定データベース ロールのメンバーである必要があります。

SQL Server Management Studio の使用

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

  1. オブジェクト エクスプローラーで、クラスター化インデックスを作成するテーブルを展開します。

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

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

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

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

  6. OK をクリックします。

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

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

  1. オブジェクト エクスプローラーで、クラスター化インデックスを持つテーブルを作成するデータベースを展開します。

  2. [テーブル] フォルダーを右クリックし、[新しいテーブル...] をクリックします。

  3. 通常どおりに新しいテーブルを作成します。 詳細については、「テーブルの 作成 (データベース エンジン)」を参照してください。

  4. 上で作成した新しいテーブルを右クリックし、[ デザイン] をクリックします。

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

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

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

  8. グリッドで、[ クラスター化として作成] を選択し、プロパティの右側にあるドロップダウン リストから [ はい ] を選択します。

  9. をクリックしてを閉じます。

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

Transact-SQL の使用

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

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

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

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

    USE AdventureWorks2012;  
    GO  
    -- Create a new table with three columns.  
    CREATE TABLE dbo.TestTable  
        (TestCol1 int NOT NULL,  
         TestCol2 nchar(10) NULL,  
         TestCol3 nvarchar(50) NULL);  
    GO  
    -- Create a clustered index called IX_TestTable_TestCol1  
    -- on the dbo.TestTable table using the TestCol1 column.  
    CREATE CLUSTERED INDEX IX_TestTable_TestCol1   
        ON dbo.TestTable (TestCol1);   
    GO  
    

詳細については、「 CREATE INDEX (Transact-SQL)」を参照してください。

こちらもご覧ください

主キーの作成
一意の制約を作成する