インデックスの削除
不要になったインデックスをデータベースから削除すると、空いたディスク領域を再利用することができます。その結果、データベースのオブジェクトが、この空いた領域を使用できます。インデックスの削除とインデックスのドロップは同義です。
PRIMARY KEY 制約または UNIQUE 制約のいずれかによって使用されているインデックスは、その制約が削除されない限り、削除できません。インデックスによって使用される FILL FACTOR 値を変更するなど、インデックスを変更することで、PRIMARY KEY 制約または UNIQUE 制約を削除して再作成しなくても、これらの制約で使用されているインデックスを実質的には削除および再作成できます。インデックスの再構築の詳細については、「インデックスの再編成と再構築」を参照してください。
インデックスを削除して再作成することなく、インデックスを再構築する方法は、クラスタ化インデックスを再作成する場合にも便利です。データが既に並べ替えられている場合は、インデックスの再構築処理の際、インデックス列を基にデータを並べ替える必要がなくなるからです。
ビュー上またはテーブル上 (パーマネント テーブルと一時テーブルの両方) に作成されたインデックスは、ビューまたはテーブルが削除されると自動的に削除されます。
メモ : |
---|
テーブルに対する ALTER 権限がある場合は、インデックスを削除できます。 |
クラスタ化インデックス
クラスタ化インデックスを削除すると、クラスタ化インデックスのリーフ レベルに格納されていたデータ行は、順序付けられていないテーブル (ヒープ) に格納されます。クラスタ化インデックスの削除には時間がかかる場合があります。これは、クラスタ化インデックスを削除するだけでなく、テーブルの非クラスタ化インデックスをすべて再構築し、クラスタ化インデックス キーをヒープへの行ポインタに置き換える必要があるためです。テーブルのインデックスをすべて削除する場合は、最初に非クラスタ化インデックスを削除し、最後にクラスタ化インデックスを削除してください。この方法であれば、インデックスを再構成する必要がありません。クラスタ化インデックスと非クラスタ化インデックスの関係の詳細については、「非クラスタ化インデックスの構造」を参照してください。
オンラインでの削除操作中、または MOVE TO 句が指定されている場合に、クラスタ化インデックスを削除するには、一時ディスク領域が必要です。詳細については、「インデックス DDL 操作に必要なディスク領域」を参照してください。
インデックス付きビューのクラスタ化インデックスを削除すると、同じビューのすべての非クラスタ化インデックスおよび自動作成された統計が自動的に削除されます。手動で作成した統計は、削除されません。
MOVE TO 句の使用
SQL Server 2005 では、MOVE TO オプションを指定すると、1 つのトランザクションで、クラスタ化インデックスを削除し、その結果生成された順序付けされていないテーブル (ヒープ) を別のファイル グループまたはパーティション構成に移動できます。MOVE TO オプションには、次の制限があります。
- インデックス付きビューまたは非クラスタ化インデックスに対しては、適用されません。
- 指定したパーティション構成またはファイル グループが、既に存在している必要があります。
- MOVE TO が指定されていない場合は、クラスタ化インデックスの削除の結果生成されたテーブルは、そのインデックスに定義されていたものと同じパーティション構成またはファイル グループに格納されます。
オンラインでのクラスタ化インデックスの削除
クラスタ化インデックスを削除する場合、ONLINE オプションを指定できます。ON に設定すると、基になるデータおよび関連付けられた非クラスタ化インデックスに対するクエリや変更が、DROP INDEX トランザクションによりブロックされません。詳細については、「オンラインでのインデックス操作の実行」を参照してください。
ONLINE オプションを ON に設定した場合は、次の制限があります。
- 一度に 1 つのインデックスしか削除できません。
- 無効にされているクラスタ化インデックスに対しては適用されません。
- ビューのクラスタ化インデックスや、テーブルまたはビューの非クラスタ化インデックスに対しては、適用されません。
- text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)、または xml のいずれかの型の列がリーフ レベルのデータ行に含まれているクラスタ化インデックスは、オンラインで削除できません。
MAXDOP インデックス オプションの設定
SQL Server 2005 では、MAXDOP インデックス オプションを指定すると、インデックスの削除操作に設定されている sp_configure の max degree of parallelism 構成オプションを上書きできます。詳細については、「並列インデックス操作の構成」を参照してください。
フルテキスト インデックス
テーブルのフルテキスト キーに指定されているインデックスは削除できません。インデックスのプロパティを表示して、インデックスがフルテキスト キーかどうかを調べてください。詳細については、「INDEXPROPERTY (Transact-SQL)」を参照してください。
インデックスを削除するには
インデックスを削除する方法 (SQL Server Management Studio)
例
A. インデックスの削除
次の例では、ProductVendor
テーブルの IX
_ProductVendor
_VendorID
インデックスを削除します。
USE AdventureWorks;
GO
DROP INDEX IX_ProductVendor_VendorID
ON Purchasing.ProductVendor;
GO
B. ONLINE モードでのクラスタ化インデックスの削除
次の例では、ONLINE オプションを ON に設定して、クラスタ化インデックスを削除します。削除の結果生成された順序付けされていないテーブル (ヒープ) は、インデックスが格納されていたのと同じファイル グループに格納されます。
USE AdventureWorks;
GO
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate
ON Production.BillOfMaterials WITH (ONLINE = ON, MAXDOP = 2);
GO