このトピックでは、SQL Server Management Studio または Transact-SQL を使用して SQL Server 2014 で無効なインデックスを有効にする方法について説明します。 インデックスが無効になった後、再構築または削除されるまで、インデックスは無効な状態のままになります
このトピックについて
作業を開始する準備:
無効なインデックスを有効にするには、次を使用します。
開始する前に
制限事項と制約条件
インデックスを再構築した後、インデックスを無効にしたために無効にされた制約は、手動で有効にする必要があります。 PRIMARY KEY 制約と UNIQUE 制約は、関連付けられているインデックスを再構築することによって有効になります。 PRIMARY KEY 制約または UNIQUE 制約を参照する FOREIGN KEY 制約を有効にする前に、このインデックスを再構築 (有効) する必要があります。 FOREIGN KEY 制約は、ALTER TABLE CHECK CONSTRAINT ステートメントを使用して有効になります。
ONLINE オプションが ON に設定されている場合、無効になっているクラスター化インデックスの再構築は実行できません。
クラスター化インデックスが無効または有効で、非クラスター化インデックスが無効になっている場合、クラスター化インデックス アクションは無効になっている非クラスター化インデックスに対して次の結果を示します。
クラスター化インデックス アクション 非クラスター化インデックスを無効にしました... ALTER INDEX REBUILD。 無効のままです。 ALTER INDEX ALLを再構成します。 再構築され、有効になります。 DROP INDEX。 無効のままです。 DROP_EXISTINGを使用してインデックスを作成します。 無効のままです。 新しいクラスター化インデックスの作成は、ALTER INDEX ALL REBUILD と同じように動作します。
クラスター化インデックスに関連付けられている非クラスター化インデックスに対して許可されるアクションは、両方のインデックスの種類の状態 (無効か有効か) によって異なります。 次の表は、非クラスター化インデックスに対して許可されるアクションをまとめたものです。
非クラスター化インデックス アクション クラスター化インデックスと非クラスター化インデックスの両方が無効になっている場合。 クラスター化インデックスが有効で、非クラスター化インデックスがいずれかの状態である場合。 ALTER INDEX REBUILD。 アクションは失敗します。 アクションは成功します。 インデックスを削除します。 アクションは成功します。 アクションは成功します。 DROP_EXISTINGを使用してインデックスを作成します。 アクションは失敗します。 アクションは成功します。
安全
権限
テーブルまたはビューに対する ALTER 権限が必要です。 DBCC DBREINDEX を使用する場合、eser はテーブルを所有しているか、 sysadmin 固定サーバー ロールまたは db_ddladmin のメンバーであり、固定データベース ロール db_owner する必要があります。
SQL Server Management Studio の使用
無効なインデックスを有効にするには
オブジェクト エクスプローラーで、プラス記号をクリックして、インデックスを有効にするテーブルを含むデータベースを展開します。
プラス記号をクリックして [テーブル] フォルダーを展開します。
プラス記号をクリックして、インデックスを有効にするテーブルを展開します。
プラス記号をクリックして [インデックス] フォルダーを展開します。
有効にするインデックスを右クリックし、[ リビルド] を選択します。
[インデックスの再構築] ダイアログ ボックスで、再構築するインデックスに正しいインデックスがあることを確認し、[OK] をクリックします。
テーブルのすべてのインデックスを有効にするには
オブジェクト エクスプローラーで、プラス記号をクリックして、インデックスを有効にするテーブルを含むデータベースを展開します。
プラス記号をクリックして [テーブル] フォルダーを展開します。
プラス記号をクリックして、インデックスを有効にするテーブルを展開します。
[インデックス] フォルダーを右クリックし、[すべて再構築] を選択します。
[インデックスの再構築] ダイアログ ボックスで、再構築するインデックスに正しいインデックスがあることを確認し、[OK] をクリックします。 インデックスからインデックスを削除 してグリッドを再構築 するには、インデックスを選択し、Delete キーを押します。
[ インデックスの再構築 ] ダイアログ ボックスでは、次の情報を使用できます。
Transact-SQL の使用
ALTER INDEX を使用して無効なインデックスを有効にするには
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
標準バーで [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。
USE AdventureWorks2012; GO -- Enables the IX_Employee_OrganizationLevel_OrganizationNode index -- on the HumanResources.Employee table. ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee REBUILD; GO
CREATE INDEX を使用して無効なインデックスを有効にするには
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
標準バーで [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。
USE AdventureWorks2012; GO -- re-creates the IX_Employee_OrganizationLevel_OrganizationNode index -- on the HumanResources.Employee table -- using the OrganizationLevel and OrganizationNode columns -- and then deletes the existing IX_Employee_OrganizationLevel_OrganizationNode index CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee (OrganizationLevel, OrganizationNode) WITH (DROP_EXISTING = ON); GO
DBCC DBREINDEX を使用して無効なインデックスを有効にするには
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
標準バーで [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。
USE AdventureWorks2012; GO -- enables the IX_Employee_OrganizationLevel_OrganizationNode index -- on the HumanResources.Employee table DBCC DBREINDEX ("HumanResources.Employee", IX_Employee_OrganizationLevel_OrganizationNode); GO
ALTER INDEX を使用してテーブルのすべてのインデックスを有効にするには
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
標準バーで [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。
USE AdventureWorks2012; GO -- enables all indexes -- on the HumanResources.Employee table ALTER INDEX ALL ON HumanResources.Employee REBUILD; GO
DBCC DBREINDEX を使用してテーブルのすべてのインデックスを有効にするには
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
標準バーで [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。
USE AdventureWorks2012; GO -- enables all indexes -- on the HumanResources.Employee table DBCC DBREINDEX ("HumanResources.Employee", " "); GO
詳細については、 ALTER INDEX (Transact-SQL)、 CREATE INDEX (Transact-SQL)、 および DBCC DBREINDEX (Transact-SQL) を参照してください。