このトピックでは、SQL Server Management Studio または Transact-SQL を使用して、既存のインデックスを現在のファイル グループから SQL Server 2014 の別のファイル グループに移動する方法について説明します。
このトピックの内容
作業を開始する準備:
既存のインデックスを別のファイル グループに移動するために使用するもの:
はじめに
制限事項と制約事項
テーブルにクラスター化インデックスがある場合、クラスター化インデックスを新しいファイル グループに移動すると、テーブルはそのファイル グループに移動します。
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」をご覧ください。
SQL Server 2014 を使用するマルチプロセッサ コンピューターでは、並列処理の最大値を指定することで、インデックス ステートメントの実行に使用するプロセッサの数を構成できます。 並列インデックス操作機能は、SQL Server のすべてのエディションで使用できるわけではありません。 SQL Server の各エディションでサポートされる機能の一覧については、「 Features Supported by the Editions of SQL Server 2014」を参照してください。 並列インデックス操作の詳細については、「 並列インデックス操作の構成」を参照してください。
OK をクリックします。
[インデックスのプロパティ - index_name] ダイアログ ボックスの [ストレージ] ページでは、次の情報を利用できます。
[ファイル グループ]
指定したファイル グループのインデックスを格納します。 一覧には、標準 (ROW) ファイル グループのみが表示されます。 既定で選択されているのは、データベースのプライマリ ファイル グループです。
[Filestream ファイル グループ]
FILESTREAM データのファイル グループを指定します。 この一覧には FILESTREAM ファイル グループのみが表示されます。 既定で選択されているのは、PRIMARY FILESTREAM ファイル グループです。
[パーティション構成]
パーティション構成のインデックスを格納します。
[パーティション構成] をクリックすると、下のグリッドが有効になります。 既定で選択されているのは、テーブルのデータを格納するために使用されるパーティション構成です。 一覧にある他のパーティション構成を選択すると、グリッドに表示される情報が更新されます。
この [パーティション構成] オプションは、データベースにパーティション構成がなければ使用できません。
[FileStream パーティション構成]
FILESTREAM データのパーティション構成を指定します。 パーティション構成は、 [パーティション構成] オプションで指定した構成と対称である必要があります。
テーブルがパーティション分割されていない場合、このフィールドは空白です。
[パーティション構成パラメーター]
パーティション構成に使用される列の名前を表示します。
[テーブル列]
パーティション構成にマップされるテーブルまたはビューを選択します。
[列データ型]
列のデータ型情報を表示します。
注
テーブルの列が計算列の場合、 [列データ型] には "計算列" と表示されます。
[インデックスの移動中に DML ステートメントのオンライン処理を許可する]
インデックス操作中に、基本となるテーブルやクラスター化インデックス データ、および関連する非クラスター化インデックスにユーザーがアクセスできるようにします。
注
XML インデックスの場合、またはインデックスが無効なクラスター化インデックスの場合、このオプションは使用できません。
[並列処理の最大限度の設定]
並列実行プランの実行中に使用されるプロセッサ数を制限します。 既定値は 0 です。0 の場合、実際に使用可能な CPU 数が使用されます。 値を 1 に設定すると、並列実行プランが生成されなくなります。値を 1 よりも大きな数値に設定すると、1 つのクエリ実行で使用されるプロセッサの最大数が限定されます。 このオプションは、ダイアログ ボックスが 再構築 または 再作成 状態のときにのみ使用できます。
注
使用可能な CPU 数よりも多い値を指定すると、実際に使用可能な CPU 数が使用されます。
Transact-SQL の使用
既存のインデックスを別のファイル グループに移動するには
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
[標準] ツール バーの [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。
USE AdventureWorks2012; GO -- Creates the TransactionsFG1 filegroup on the AdventureWorks2012 database ALTER DATABASE AdventureWorks2012 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 AdventureWorks2012 ADD FILE ( NAME = TransactionsFG1dat3, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12\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)」を参照してください。