インデックスの無効化
インデックスを無効にすると、ユーザーはそのインデックスにアクセスできなくなります。クラスタ化インデックスの場合は、基になるテーブルのデータにアクセスできなくなります。ただし、インデックス定義はメタデータに残り、インデックス統計は非クラスタ化インデックス上に保持されます。ビューの非クラスタ化インデックスまたはクラスタ化インデックスを無効にすると、そのインデックス データは物理的に削除されます。テーブルのクラスタ化インデックスを無効にすると、データにアクセスできなくなります。つまり、データはテーブルに残りますが、そのインデックスを削除するか再構築するまでは、DML 操作で使用できなくなります。無効になったインデックスを再構築し有効にするには、ALTER INDEX REBUILD ステートメントまたは CREATE INDEX WITH DROP_EXISTING ステートメントを使用します。
次の場合には、1 つ以上のインデックスが無効になることがあります。
- SQL Server のアップグレード中に、SQL Server 2005 データベース エンジン により自動的にインデックスが無効にされる場合。
- ALTER INDEX を使用して手動でインデックスを無効にする場合。
SQL Server のアップグレードによるインデックスの無効化
インデックス定義またはビュー定義に次のいずれかが含まれている場合、SQL Server の新しいリリースまたは Service Pack へのアップグレード中に、ビューのインデックスなどのインデックスはデータベース エンジン によって自動的に特定され、無効になります。
- インデックスのデータ整合性がデータベース エンジン で保証できなくなった式。
たとえば、アップグレードによって異なる結果を返すように変更されたシステム関数や関数をインデックスで使用しているとします。アップグレード後のそのインデックスには無効なデータが含まれることになる可能性があるので、そのインデックスはアップグレード中にデータベース エンジン によって無効化されます。 - アップグレードの一環として変更され、インデックスが適切に並べ替えられなくなった照合順序。
インデックスがアップグレード プロセスで無効化される場合、無効になるインデックス名や関連する制約名を示す警告メッセージが表示されるので、アップグレードの完了後に無効になったインデックスを再構築できます。インデックスを再構築し、すべての制約を有効にすることで、アップグレード中に無効化されたデータが修正されます。
データベース エンジン ではデータ整合性を保証できなくなった式が CHECK 制約の定義に含まれていると、その CHECK 制約が無効になることがあります。無効になった CHECK 制約を有効にするには、ALTER TABLE CHECK ステートメントを使用します。
ALTER INDEX を使用したインデックスの無効化
ALTER INDEX DISABLE ステートメントを使用して、インデックスをいつでも手動で無効にできます。
メモ : |
---|
テーブルがトランザクション レプリケーション パブリケーションに含まれている場合は、主キー列に関連付けられているインデックスを無効にすることはできません。このようなインデックスはレプリケーションに必要です。インデックスを無効にするには、最初にそのテーブルをパブリケーションから削除する必要があります。詳細については、「データとデータベース オブジェクトのパブリッシュ」を参照してください。 |
次の操作を行う場合に、インデックスを無効にすることがあります。
- インデックス ページのディスク I/O エラー (823 エラーまたは 824 エラー) を修正した後のインデックスの再構築。
- トラブルシューティングを目的とした、インデックスの一時的な削除。
- 非クラスタ化インデックスの再構築。
非クラスタ化インデックスを無効にしていないときに、インデックスの再構築操作を行うと、古いインデックスと新しいインデックスの両方を十分に格納できるだけの一時ディスク領域が必要になります。ただし、別のトランザクションで非クラスタ化インデックスを無効にし再構築することにより、インデックスを無効にしたことで使用可能になったディスク領域を、その後の再構築操作や他の操作で使用できるようになります。並べ替え操作で使用するための一時ディスク領域以外に領域は必要ありません。このために必要な一時ディスク領域は、通常、インデックスのサイズの 20% に相当します。
ディスク領域が限られている場合には、非クラスタ化インデックスを再構築する前にその非クラスタ化インデックスを無効にすることが役に立つ場合があります。たとえば、1 つ以上のテーブルのすべての非クラスタ化インデックスを再構築するストアド プロシージャがあるとします。まず、それらの非クラスタ化インデックスを再構築操作とは別のトランザクションで無効にすることで、非クラスタ化インデックスの再構築に必要な一時ディスク領域のサイズを大幅に削減できます。
インデックスを無効にするには
インデックスを再構築する方法 (SQL Server Management Studio)
参照
概念
インデックスを無効にする場合のガイドライン
インデックスと制約を有効にするためのガイドライン