このトピックでは、SQL Server 2012 で SQL Server Management Studio または Transact-SQL を使用して、既存のインデックスを現在のファイル グループから別のファイル グループに移動する方法について説明します。
このトピックの内容
作業を開始する準備:
制限事項と制約事項
セキュリティ
既存のインデックスを別のファイル グループに移動するために使用するもの:
SQL Server Management Studio
Transact-SQL
作業を開始する準備
制限事項と制約事項
テーブルにクラスター化インデックスがある場合、クラスター化インデックスを新しいファイル グループに移動すると、テーブルはそのファイル グループに移動します。
UNIQUE 制約または PRIMARY KEY 制約を使用して作成されたインデックスは、Management Studio を使用して移動することはできません。 これらのインデックスを移動するには、Transact-SQL で CREATE INDEX ステートメントを (DROP_EXISTING=ON) オプションと共に使用します。
セキュリティ
権限
テーブルまたはビューに対する ALTER 権限が必要です。 実行するには、固定サーバー ロール sysadmin または、固定データベース ロール db_ddladmin および db_owner のメンバーである必要があります。
[Top]
SQL Server Management Studio の使用
テーブル デザイナーを使用して既存のインデックスを別のファイル グループに移動するには
オブジェクト エクスプローラーで、移動するインデックスがあるテーブルが格納されているデータベースをプラス記号をクリックして展開します。
プラス記号をクリックして [テーブル] フォルダーを展開します。
移動するインデックスがあるテーブルを右クリックし、[デザイン] を選択します。
[テーブル デザイナー] メニューの [インデックス/キー] をクリックします。
移動するインデックスを選択します。
メイン グリッドで、[データ領域の指定] を展開します。
[ファイル グループまたはパーティション構成名] を選択し、インデックスの移動先のファイル グループまたはパーティション構成を一覧から選択します。
[閉じる] をクリックします。
[ファイル] メニューの [table_name を保存] を選択します。
オブジェクト エクスプローラーで既存のインデックスを別のファイル グループに移動するには
オブジェクト エクスプローラーで、移動するインデックスがあるテーブルが格納されているデータベースをプラス記号をクリックして展開します。
プラス記号をクリックして [テーブル] フォルダーを展開します。
プラス記号をクリックして、移動するインデックスのあるテーブルを展開します。
プラス記号をクリックして [インデックス] フォルダーを展開します。
移動するインデックスを右クリックし、[プロパティ] を選択します。
[ページの選択] の [ストレージ] を選択します。
インデックスの移動先のファイル グループを選択します。
テーブルまたはインデックスがパーティション分割されている場合は、インデックスの移動先のパーティション構成を選択します。 パーティション インデックスの詳細については、「パーティション テーブルとパーティション インデックス」を参照してください。
クラスター化インデックスを移動する場合は、オンライン処理を使用できます。 オンライン処理を使用すると、インデックス操作中、基になるデータや非クラスター化インデックスへの同時ユーザー アクセスが可能になります。 詳細については、「オンラインでのインデックス操作の実行」を参照してください。
SQL Server 2012 を使用するマルチプロセッサ コンピューターでは、並列処理の最大許容値を設定することで、インデックス ステートメントの実行に使用するプロセッサの数を構成できます。 並列インデックス操作機能は、SQL Server のすべてのエディションで使用できるわけではありません。 SQL Server の各エディションでサポートされる機能の一覧については、「SQL Server 2012 の各エディションがサポートする機能」(https://go.microsoft.com/fwlink/?linkid=232473) を参照してください。 並列インデックス操作の詳細については、「並列インデックス操作の構成」を参照してください。
[OK] をクリックします。
[インデックスのプロパティ – index_name] ダイアログ ボックスの [ストレージ] ページでは、次の情報が利用できます。
[ファイル グループ]
指定したファイル グループのインデックスを格納します。 一覧には、標準 (ROW) ファイル グループのみが表示されます。 既定で選択されているのは、データベースのプライマリ ファイル グループです。[Filestream ファイル グループ]
FILESTREAM データのファイル グループを指定します。 この一覧には FILESTREAM ファイル グループのみが表示されます。 既定で選択されているのは、PRIMARY FILESTREAM ファイル グループです。[パーティション構成]
パーティション構成のインデックスを格納します。 [パーティション構成] をクリックすると、下のグリッドが有効になります。 既定で選択されているのは、テーブルのデータを格納するために使用されるパーティション構成です。 一覧にある他のパーティション構成を選択すると、グリッドに表示される情報が更新されます。この [パーティション構成] オプションは、データベースにパーティション構成がなければ使用できません。
[FileStream パーティション構成]
FILESTREAM データのパーティション構成を指定します。 パーティション構成は、[パーティション構成] オプションで指定した構成と対称である必要があります。テーブルがパーティション分割されていない場合、このフィールドは空白です。
[パーティション構成パラメーター]
パーティション構成に使用される列の名前を表示します。[テーブル列]
パーティション構成にマップされるテーブルまたはビューを選択します。[列データ型]
列のデータ型情報を表示します。
注テーブルの列が計算列の場合、[列データ型] には "計算列" と表示されます。
[インデックスの移動中に DML ステートメントのオンライン処理を許可する]
インデックス操作中に、基本となるテーブルやクラスター化インデックス データ、および関連する非クラスター化インデックスにユーザーがアクセスできるようにします。
注XML インデックスの場合、またはインデックスが無効なクラスター化インデックスの場合、このオプションは使用できません。
[並列処理の最大限度の設定]
並列実行プランの実行中に使用されるプロセッサ数を制限します。 既定値は 0 です。0 の場合、実際に使用可能な CPU 数が使用されます。 値を 1 に設定すると、並列実行プランが生成されなくなります。値を 1 よりも大きな数値に設定すると、1 つのクエリ実行で使用されるプロセッサの最大数が限定されます。 このオプションは、ダイアログ ボックスが再構築または再作成状態のときにのみ使用できます。
注使用可能な CPU 数よりも多い値を指定すると、実際に使用可能な CPU 数が使用されます。
[Top]
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\MSSQL11\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)」を参照してください。
[Top]