既存のインデックスの別のファイル グループへの移動
適用対象: SQL Server Azure 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 を使用します。
テーブル デザイナーを使用して既存のインデックスを別のファイル グループに移動するには
オブジェクト エクスプローラーで、移動するインデックスがあるテーブルが格納されているデータベースをプラス記号をクリックして展開します。
プラス記号をクリックして [テーブル] フォルダーを展開します。
移動するインデックスがあるテーブルを右クリックし、 [デザイン]を選択します。
[テーブル デザイナー] メニューの [インデックス/キー]をクリックします。
移動するインデックスを選択します。
メイン グリッドで、 [データ領域の指定]を展開します。
[ファイル グループまたはパーティション構成名] を選択し、インデックスの移動先のファイル グループまたはパーティション構成を一覧から選択します。
[閉じる] をクリックします。
[ファイル] メニューの table_nameを保存]を選びます。
オブジェクト エクスプローラーで既存のインデックスを別のファイル グループに移動するには
オブジェクト エクスプローラーで、移動するインデックスがあるテーブルが格納されているデータベースをプラス記号をクリックして展開します。
プラス記号をクリックして [テーブル] フォルダーを展開します。
プラス記号をクリックして、移動するインデックスのあるテーブルを展開します。
プラス記号をクリックして [インデックス] フォルダーを展開します。
移動するインデックスを右クリックし、 [プロパティ]を選択します。
[ページの選択]の [ストレージ]を選択します。
インデックスの移動先のファイル グループを選択します。
テーブルまたはインデックスがパーティション分割されている場合は、インデックスの移動先のパーティション構成を選択します。 パーティション インデックスの詳細については、「 Partitioned Tables and Indexes」を参照してください。
クラスター化インデックスを移動する場合は、オンライン処理を使用できます。 オンライン処理を使用すると、インデックス操作中、基になるデータや非クラスター化インデックスへの同時ユーザー アクセスが可能になります。 詳しくは、「 Perform Index Operations Online」をご覧ください。
Transact-SQL を使用するマルチプロセッサ コンピューターでは、並列処理の最大許容値を設定することで、インデックス ステートメントの実行に使用するプロセッサの数を構成できます。 並列インデックス操作機能は、SQL Server のすべてのエディションで使用できるわけではありません。 SQL Serverの各エディションでサポートされる機能の一覧については、「 SQL Server 2016 の各エディションがサポートする機能」を参照してください。 並列インデックス操作の詳細については、「 並列インデックス操作の構成」を参照してください。
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 の使用
既存のインデックスを別のファイル グループに移動するには
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
[標準] ツール バーの [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。
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)」を参照してください。