既存のインデックスの別のファイル グループへの移動

適用対象: SQL ServerAzure SQL Managed Instance

この記事では、SQL Server Management Studio または Transact-SQL を使用して、 SQL Serverで既存のインデックスを現在のファイル グループから別のファイル グループに移動する方法について説明します。

非クラスター化インデックスを別のファイル グループに配置する理由など、設計上の考慮事項については、「ファイル グループまたはパーティション構成に対するインデックス配置」を参照してください。

開始する前に

制限事項と制約事項

  • テーブルにクラスター化インデックスがある場合、クラスター化インデックスを新しいファイル グループに移動すると、テーブルはそのファイル グループに移動します。

  • UNIQUE 制約または PRIMARY KEY 制約を使用して作成されたインデックスは、Management Studio を使用して移動することはできません。 これらのインデックスを移動するには、Transact-SQL で CREATE INDEX ステートメントを (DROP_EXISTING=ON) オプションと共に使用します。

セキュリティ

アクセス許可

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

SQL Server Management Studio を使用する

テーブル デザイナーを使用して既存のインデックスを別のファイル グループに移動するには

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

  2. プラス記号をクリックして [テーブル] フォルダーを展開します。

  3. 移動するインデックスがあるテーブルを右クリックし、 [デザイン]を選択します。

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

  5. 移動するインデックスを選択します。

  6. メイン グリッドで、 [データ領域の指定]を展開します。

  7. [ファイル グループまたはパーティション構成名] を選択し、インデックスの移動先のファイル グループまたはパーティション構成を一覧から選択します。

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

  9. [ファイル] メニューの table_nameを保存]を選びます。

オブジェクト エクスプローラーで既存のインデックスを別のファイル グループに移動するには

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

  2. プラス記号をクリックして [テーブル] フォルダーを展開します。

  3. プラス記号をクリックして、移動するインデックスのあるテーブルを展開します。

  4. プラス記号をクリックして [インデックス] フォルダーを展開します。

  5. 移動するインデックスを右クリックし、 [プロパティ]を選択します。

  6. [ページの選択][ストレージ]を選択します。

  7. インデックスの移動先のファイル グループを選択します。

    テーブルまたはインデックスがパーティション分割されている場合は、インデックスの移動先のパーティション構成を選択します。 パーティション インデックスの詳細については、「 Partitioned Tables and Indexes」を参照してください。

    クラスター化インデックスを移動する場合は、オンライン処理を使用できます。 オンライン処理を使用すると、インデックス操作中、基になるデータや非クラスター化インデックスへの同時ユーザー アクセスが可能になります。 詳しくは、「 Perform Index Operations Online」をご覧ください。

    Transact-SQL を使用するマルチプロセッサ コンピューターでは、並列処理の最大許容値を設定することで、インデックス ステートメントの実行に使用するプロセッサの数を構成できます。 並列インデックス操作機能は、SQL Server のすべてのエディションで使用できるわけではありません。 SQL Serverの各エディションでサポートされる機能の一覧については、「 SQL Server 2016 の各エディションがサポートする機能」を参照してください。 並列インデックス操作の詳細については、「 並列インデックス操作の構成」を参照してください。

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

[インデックスのプロパティ – index_name] ダイアログ ボックスの [ストレージ] ページでは、次の情報が利用できます。

[ファイル グループ]
指定したファイル グループのインデックスを格納します。 一覧には、標準 (ROW) ファイル グループのみが表示されます。 既定で選択されているのは、データベースのプライマリ ファイル グループです。

[Filestream ファイル グループ]
FILESTREAM データのファイル グループを指定します。 この一覧には FILESTREAM ファイル グループのみが表示されます。 既定で選択されているのは、PRIMARY FILESTREAM ファイル グループです。

[パーティション構成]
パーティション構成のインデックスを格納します。 [パーティション構成] をクリックすると、下のグリッドが有効になります。 既定で選択されているのは、テーブルのデータを格納するために使用されるパーティション構成です。 一覧にある他のパーティション構成を選択すると、グリッドに表示される情報が更新されます。

この [パーティション構成] オプションは、データベースにパーティション構成がなければ使用できません。

[FileStream パーティション構成]
FILESTREAM データのパーティション構成を指定します。 パーティション構成は、 [パーティション構成] オプションで指定した構成と対称である必要があります。

テーブルがパーティション分割されていない場合、このフィールドは空白です。

[パーティション構成パラメーター]
パーティション構成に使用される列の名前を表示します。

[テーブル列]
パーティション構成にマップされるテーブルまたはビューを選択します。

[列データ型]
列のデータ型情報を表示します。

Note

テーブルの列が計算列の場合、 [列データ型] には "計算列" と表示されます。

[インデックスの移動中に DML ステートメントのオンライン処理を許可する]
インデックス操作中に、基本となるテーブルやクラスター化インデックス データ、および関連する非クラスター化インデックスにユーザーがアクセスできるようにします。

Note

XML インデックスの場合、またはインデックスが無効なクラスター化インデックスの場合、このオプションは使用できません。

[並列処理の最大限度の設定]
並列実行プランの実行中に使用されるプロセッサ数を制限します。 既定値は 0 です。0 の場合、実際に使用可能な CPU 数が使用されます。 値を 1 に設定すると、並列実行プランが生成されなくなります。値を 1 よりも大きな数値に設定すると、1 つのクエリ実行で使用されるプロセッサの最大数が限定されます。 このオプションは、ダイアログ ボックスが 再構築 または 再作成 状態のときにのみ使用できます。

Note

使用可能な CPU 数よりも多い値を指定すると、実際に使用可能な CPU 数が使用されます。

Transact-SQL の使用

既存のインデックスを別のファイル グループに移動するには

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

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

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

    USE AdventureWorks2022;  
    GO  
    -- Creates the TransactionsFG1 filegroup on the AdventureWorks2022 database  
    ALTER DATABASE AdventureWorks2022  
    ADD FILEGROUP TransactionsFG1;  
    GO  
    /* Adds the TransactionsFG1dat3 file to the TransactionsFG1 filegroup. Please note that you will have to change the filename parameter in this statement to execute it without errors.  
    */  
    ALTER DATABASE AdventureWorks2022   
    ADD FILE   
    (  
        NAME = TransactionsFG1dat3,  
        FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13\MSSQL\DATA\TransactionsFG1dat3.ndf',  
        SIZE = 5MB,  
        MAXSIZE = 100MB,  
        FILEGROWTH = 5MB  
    )  
    TO FILEGROUP TransactionsFG1;  
    GO  
    /*Creates the IX_Employee_OrganizationLevel_OrganizationNode index  
      on the TransactionsPS1 filegroup and drops the original IX_Employee_OrganizationLevel_OrganizationNode index.  
    */  
    CREATE NONCLUSTERED INDEX IX_Employee_OrganizationLevel_OrganizationNode  
        ON HumanResources.Employee (OrganizationLevel, OrganizationNode)  
        WITH (DROP_EXISTING = ON)  
        ON TransactionsFG1;  
    GO  
    

次のステップ

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

SQL Server のインデックスのアーキテクチャとデザイン ガイド