DROP INDEX (Transact-SQL)DROP INDEX (Transact-SQL)

適用対象: ○SQL Server ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

1 つ以上のリレーショナル インデックス、空間インデックス、フィルター選択されたインデックス、または XML インデックスを現在のデータベースから削除します。Removes one or more relational, spatial, filtered, or XML indexes from the current database. MOVE TO オプションを指定すると、1 つのトランザクションで、クラスター化インデックスを削除し、その結果生成されたテーブルを別のファイル グループまたはパーティション構成に移動できます。You can drop a clustered index and move the resulting table to another filegroup or partition scheme in a single transaction by specifying the MOVE TO option.

DROP INDEX ステートメントは、PRIMARY KEY 制約または UNIQUE 制約を定義することで作成されたインデックスには適用されません。The DROP INDEX statement does not apply to indexes created by defining PRIMARY KEY or UNIQUE constraints. 制約および対応するインデックスを削除するには、ALTER TABLE を DROP CONSTRAINT 句と共に使用します。To remove the constraint and corresponding index, use ALTER TABLE with the DROP CONSTRAINT clause.

重要

<drop_backward_compatible_index> で定義される構文は、MicrosoftMicrosoft SQL ServerSQL Server の今後のバージョンでは削除される予定です。The syntax defined in <drop_backward_compatible_index> will be removed in a future version of MicrosoftMicrosoftSQL ServerSQL Server. 新規の開発作業ではこの構文を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。Avoid using this syntax in new development work, and plan to modify applications that currently use the feature. 代わりに、<drop_relational_or_xml_index> で指定されている構文を使用してください。Use the syntax specified under <drop_relational_or_xml_index> instead. XML インデックスは、旧バージョンとの互換性のための構文を使用して削除することはできません。XML indexes cannot be dropped using backward compatible syntax.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

-- Syntax for SQL Server (All options except filegroup and filestream apply to Azure SQL Database.)  
  
DROP INDEX [ IF EXISTS ]   
{ <drop_relational_or_xml_or_spatial_index> [ ,...n ]   
| <drop_backward_compatible_index> [ ,...n ]  
}  
  
<drop_relational_or_xml_or_spatial_index> ::=  
    index_name ON <object>   
    [ WITH ( <drop_clustered_index_option> [ ,...n ] ) ]  
  
<drop_backward_compatible_index> ::=  
    [ owner_name. ] table_or_view_name.index_name  
  
<object> ::=  
{ database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }  
  
<drop_clustered_index_option> ::=  
{  
    MAXDOP = max_degree_of_parallelism  
  | ONLINE = { ON | OFF }  
  | MOVE TO { partition_scheme_name ( column_name )   
            | filegroup_name  
            | "default"   
            }  
  [ FILESTREAM_ON { partition_scheme_name   
            | filestream_filegroup_name   
            | "default" } ]  
}  
-- Syntax for Azure SQL Database  
  
DROP INDEX  
{ <drop_relational_or_xml_or_spatial_index> [ ,...n ]   
}  
  
<drop_relational_or_xml_or_spatial_index> ::=   
    index_name ON <object>  
  
<object> ::=   
{ database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
DROP INDEX index_name ON { database_name.schema_name.table_name | schema_name.table_name | table_name }  
[;]  

引数Arguments

IF EXISTSIF EXISTS
適用対象: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) から現在のバージョンまで)。Applies to: SQL ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) through current version).

条件付きでは既に存在する場合にのみ、インデックスを削除します。Conditionally drops the index only if it already exists.

index_nameindex_name
削除するインデックスの名前です。Is the name of the index to be dropped.

database_namedatabase_name
データベースの名前です。Is the name of the database.

schema_nameschema_name
テーブルまたはビューが属するスキーマの名前を指定します。Is the name of the schema to which the table or view belongs.

table_or_view_nametable_or_view_name
インデックスに関連付けられているテーブルまたはビューの名前です。Is the name of the table or view associated with the index. 空間インデックスはテーブルでのみサポートされます。Spatial indexes are supported only on tables.

オブジェクトに対するインデックスのレポートを表示するには、sys.indexes カタログ ビューを使用します。To display a report of the indexes on an object, use the sys.indexes catalog view.

Windows Azure SQL データベースでは、database_name が現在のデータベースの場合、または database_name が tempdb で、object_name が # で始まる場合に、3 つの要素で構成された名前形式 database_name.[schema_name].object_name をサポートします。Windows Azure SQL Database supports the three-part name format database_name.[schema_name].object_name when the database_name is the current database or the database_name is tempdb and the object_name starts with #.

<drop_clustered_index_option><drop_clustered_index_option>
適用対象: SQL Server 2008SQL Server 2008 から SQL Server 2017SQL Server 2017SQL DatabaseSQL DatabaseApplies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, SQL DatabaseSQL Database.

クラスター化インデックス オプションを制御します。Controls clustered index options. これらのオプションは、他のインデックス型では使用できません。These options cannot be used with other index types.

MAXDOP = max_degree_of_parallelismMAXDOP = max_degree_of_parallelism
に適用されます: SQL Server 2008SQL Server 2008 を通じて SQL Server 2017SQL Server 2017, 、 SQL DatabaseSQL Database (パフォーマンス レベル P2、P3 のみ)。Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, SQL DatabaseSQL Database (Performance Levels P2 and P3 only).

インデックス操作の間、max degree of parallelism 構成オプションをオーバーライドします。Overrides the max degree of parallelism configuration option for the duration of the index operation. 詳細については、「 max degree of parallelism サーバー構成オプションの構成」を参照してください。For more information, see Configure the max degree of parallelism Server Configuration Option. 並列プランの実行で使用されるプロセッサ数を制限するには、MAXDOP を使用します。Use MAXDOP to limit the number of processors used in a parallel plan execution. 最大数は 64 プロセッサです。The maximum is 64 processors.

重要

MAXDOP は、空間インデックスまたは XML インデックスには使用できません。MAXDOP is not allowed for spatial indexes or XML indexes.

max_degree_of_parallelism は次のように指定できます。max_degree_of_parallelism can be:

11
並列プラン生成を抑制します。Suppresses parallel plan generation.

>1>1
並列インデックス操作で使用される最大プロセッサ数を、指定した数に制限します。Restricts the maximum number of processors used in a parallel index operation to the specified number.

0 (既定値)0 (default)
現在のシステム ワークロードに基づいて、実際の数以下のプロセッサを使用します。Uses the actual number of processors or fewer based on the current system workload.

詳細については、「 並列インデックス操作の構成」を参照してください。For more information, see Configure Parallel Index Operations.

注意

並列インデックス操作は、SQL ServerSQL Server の一部のエディションで使用できません。Parallel index operations are not available in every edition of SQL ServerSQL Server. SQL ServerSQL Server の各エディションでサポートされる機能の一覧については、「Editions and Supported Features for SQL Server 2016」 (SQL Server 2016 のエディションとサポートされる機能) を参照してください。For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016.

ONLINE = ON | OFFONLINE = ON | OFF
適用対象: SQL Server 2008SQL Server 2008 から SQL Server 2017SQL Server 2017Azure SQL データベースAzure SQL DatabaseApplies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, Azure SQL データベースAzure SQL Database.

インデックス操作時に、基になるテーブルや関連するインデックスをクエリやデータ変更で使用できるかどうかを指定します。Specifies whether underlying tables and associated indexes are available for queries and data modification during the index operation. 既定値は OFF です。The default is OFF.

ONON
長期間のテーブル ロックは持続されません。Long-term table locks are not held. これにより、基となるテーブルに対してクエリや更新を続けることができます。This allows queries or updates to the underlying table to continue.

OFFOFF
テーブル ロックが適用され、インデックス操作中はテーブルが利用できません。Table locks are applied and the table is unavailable for the duration of the index operation.

クラスター化インデックスを削除するときには、ONLINE オプションだけを指定できます。The ONLINE option can only be specified when you drop clustered indexes. 詳細については、「解説」を参照してください。For more information, see the Remarks section.

注意

オンラインでのインデックス操作は、 SQL ServerSQL Serverのすべてのエディションで使用できるわけではありません。Online index operations are not available in every edition of SQL ServerSQL Server. SQL ServerSQL Server の各エディションでサポートされる機能の一覧については、「Editions and Supported Features for SQL Server 2016」 (SQL Server 2016 のエディションとサポートされる機能) を参照してください。For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016.

MOVE TO { partition_scheme_name ( column_name ) | filegroup_name | " default "MOVE TO { partition_scheme_name(column_name) | filegroup_name | " default "
適用対象: SQL Server 2008SQL Server 2008 から SQL Server 2017SQL Server 2017Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017. SQL DatabaseSQL Database はファイル グループの名前として "default" をサポートしています。supports "default" as the filegroup name.

現在クラスター化インデックスのリーフ レベルにあるデータ行を移動する場所を指定します。Specifies a location to move the data rows that currently are in the leaf level of the clustered index. データは、ヒープの形式で新しい場所に移動されます。The data is moved to the new location in the form of a heap. 新しい場所としてパーティション構成またはファイル グループを指定できますが、このパーティション構成やファイル グループはあらかじめ存在している必要があります。You can specify either a partition scheme or filegroup as the new location, but the partition scheme or filegroup must already exist. MOVE TO は、インデックス付きビューまたは非クラスター化インデックスに対しては有効ではありません。MOVE TO is not valid for indexed views or nonclustered indexes. パーティション構成やファイル グループを指定しないと、結果のテーブルは、クラスター化インデックスに対して定義されているのと同じパーティション構成またはファイル グループに配置されます。If a partition scheme or filegroup is not specified, the resulting table will be located in the same partition scheme or filegroup as was defined for the clustered index.

MOVE TO を使用してクラスター化インデックスを削除すると、ベース テーブル上の非クラスター化インデックスが再構築されますが、元のファイル グループまたはパーティション構成からは移動されません。If a clustered index is dropped by using MOVE TO, any nonclustered indexes on the base table are rebuilt, but they remain in their original filegroups or partition schemes. ベース テーブルを別のファイル グループやパーティション構成に移動しても、非クラスター化インデックスは、ベース テーブルの新しい場所 (ヒープ) に同時に移動されません。If the base table is moved to a different filegroup or partition scheme, the nonclustered indexes are not moved to coincide with the new location of the base table (heap). したがって、以前に非クラスター化インデックスがクラスター化インデックスに対応した位置にあっても、ヒープとは対応しなくなる可能性があります。Therefore, even if the nonclustered indexes were previously aligned with the clustered index, they might no longer be aligned with the heap. パーティション インデックスの位置合わせの詳細については、「パーティション テーブルとパーティション インデックス」を参照してください。For more information about partitioned index alignment, see Partitioned Tables and Indexes.

partition_scheme_name ( column_name )partition_scheme_name ( column_name )
適用対象: SQL Server 2008SQL Server 2008 から SQL Server 2017SQL Server 2017SQL DatabaseSQL DatabaseApplies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, SQL DatabaseSQL Database.

結果のテーブルのための場所として、パーティション構成を指定します。Specifies a partition scheme as the location for the resulting table. パーティション構成は、CREATE PARTITION SCHEME または ALTER PARTITION SCHEME のどちらかを実行して、あらかじめ作成しておく必要があります。The partition scheme must have already been created by executing either CREATE PARTITION SCHEME or ALTER PARTITION SCHEME. 場所を指定しないでテーブルをパーティション分割すると、テーブルは既存のクラスター化インデックスと同じパーティション構成に格納されます。If no location is specified and the table is partitioned, the table is included in the same partition scheme as the existing clustered index.

構成内の列名は、インデックス定義内の列に制限されません。The column name in the scheme is not restricted to the columns in the index definition. ベース テーブルの任意の列を指定できます。Any column in the base table can be specified.

filegroup_namefilegroup_name
適用対象: SQL Server 2008SQL Server 2008 から SQL Server 2017SQL Server 2017Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

結果のテーブルのための場所として、ファイル グループを指定します。Specifies a filegroup as the location for the resulting table. 場所を指定しないでテーブルをパーティション分割すると、結果のテーブルはクラスター化インデックスと同じファイル グループに格納されます。If no location is specified and the table is not partitioned, the resulting table is included in the same filegroup as the clustered index. ファイル グループは既に存在している必要があります。The filegroup must already exist.

" default "" default "
結果のテーブルの既定の場所を指定します。Specifies the default location for the resulting table.

注意

このコンテキストでは、default はキーワードではありません。In this context, default is not a keyword. これは、既定のファイル グループの識別子で、MOVE TO " default " または MOVE TO [ default ] のように区切り記号で区切る必要があります。It is an identifier for the default filegroup and must be delimited, as in MOVE TO " default " or MOVE TO [ default ]. " default " を指定する場合は、現在のセッションに対して QUOTED_IDENTIFIER オプションが ON に設定されている必要があります。If " default " is specified, the QUOTED_IDENTIFIER option must be set ON for the current session. これが既定の設定です。This is the default setting. 詳細については、「SET QUOTED_IDENTIFIER (Transact-SQL)」をご覧ください。For more information, see SET QUOTED_IDENTIFIER (Transact-SQL).

FILESTREAM_ON { partition_scheme_name | filestream_filegroup_name | " default " }FILESTREAM_ON { partition_scheme_name | filestream_filegroup_name | " default " }
適用対象: SQL Server 2008SQL Server 2008 から SQL Server 2017SQL Server 2017Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

現在クラスター化インデックスのリーフ レベルに格納されている FILESTREAM テーブルを移動する場所を指定します。Specifies a location to move the FILESTREAM table that currently is in the leaf level of the clustered index. データは、ヒープの形式で新しい場所に移動されます。The data is moved to the new location in the form of a heap. 新しい場所としてパーティション構成またはファイル グループを指定できますが、このパーティション構成やファイル グループはあらかじめ存在している必要があります。You can specify either a partition scheme or filegroup as the new location, but the partition scheme or filegroup must already exist. FILESTREAM ON は、インデックス付きビューまたは非クラスター化インデックスに対しては無効です。FILESTREAM ON is not valid for indexed views or nonclustered indexes. パーティション構成が指定されていない場合、データは、クラスター化インデックスに定義されていたものと同じパーティション構成に格納されます。If a partition scheme is not specified, the data will be located in the same partition scheme as was defined for the clustered index.

partition_scheme_namepartition_scheme_name
FILESTREAM データのパーティション構成を指定します。Specifies a partition scheme for the FILESTREAM data. パーティション構成は、CREATE PARTITION SCHEME または ALTER PARTITION SCHEME のどちらかを実行して、あらかじめ作成しておく必要があります。The partition scheme must have already been created by executing either CREATE PARTITION SCHEME or ALTER PARTITION SCHEME. 場所を指定しないでテーブルをパーティション分割すると、テーブルは既存のクラスター化インデックスと同じパーティション構成に格納されます。If no location is specified and the table is partitioned, the table is included in the same partition scheme as the existing clustered index.

MOVE TO にパーティション構成を指定する場合は、FILESTREAM ON にも同じパーティション構成を使用する必要があります。If you specify a partition scheme for MOVE TO, you must use the same partition scheme for FILESTREAM ON.

filestream_filegroup_namefilestream_filegroup_name
FILESTREAM データの FILESTREAM ファイル グループを指定します。Specifies a FILESTREAM filegroup for FILESTREAM data. 位置を指定せず、テーブルがパーティション分割されていない場合、データは既定の FILESTREAM ファイル グループに含められます。If no location is specified and the table is not partitioned, the data is included in the default FILESTREAM filegroup.

" default "" default "
FILESTREAM データの既定の位置を指定します。Specifies the default location for the FILESTREAM data.

注意

このコンテキストでは、default はキーワードではありません。In this context, default is not a keyword. これは、既定のファイル グループの識別子で、MOVE TO " default " または MOVE TO [ default ] のように区切り記号で区切る必要があります。It is an identifier for the default filegroup and must be delimited, as in MOVE TO " default " or MOVE TO [ default ]. "default" を指定する場合は、現在のセッションに対して QUOTED_IDENTIFIER オプションが ON である必要があります。If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. これが既定の設定です。This is the default setting. 詳細については、「SET QUOTED_IDENTIFIER (Transact-SQL)」をご覧ください。For more information, see SET QUOTED_IDENTIFIER (Transact-SQL).

RemarksRemarks

非クラスター化インデックスを削除すると、インデックス定義がメタデータから削除され、インデックス データ ページ (B ツリー) がデータベース ファイルから削除されます。When a nonclustered index is dropped, the index definition is removed from metadata and the index data pages (the B-tree) are removed from the database files. クラスター化インデックスを削除すると、インデックス定義がメタデータから削除され、クラスター化インデックスのリーフ レベルに格納されたデータ行は、結果の順序付けられていないテーブル (ヒープ) に格納されます。When a clustered index is dropped, the index definition is removed from metadata and the data rows that were stored in the leaf level of the clustered index are stored in the resulting unordered table, a heap. それまでインデックスが使用していたすべての領域は解放されます。All the space previously occupied by the index is regained. この領域は、任意のデータベース オブジェクトに使用できます。This space can then be used for any database object.

インデックスが格納されているファイル グループがオフラインであるか読み取り専用に設定されている場合には、インデックスを削除することはできません。An index cannot be dropped if the filegroup in which it is located is offline or set to read-only.

インデックス付きビューのクラスター化インデックスを削除すると、同じビューのすべての非クラスター化インデックスと自動作成された統計情報が自動的に削除されます。When the clustered index of an indexed view is dropped, all nonclustered indexes and auto-created statistics on the same view are automatically dropped. 手動で作成した統計情報は削除されません。Manually created statistics are not dropped.

構文 table_or_view_name . index_name は旧バージョンとの互換性のために維持されます。The syntax table_or_view_name.index_name is maintained for backward compatibility. XML インデックスまたは空間インデックスは、旧バージョンとの互換性のための構文を使用して削除することはできません。An XML index or spatial index cannot be dropped by using the backward compatible syntax.

128 以上のエクステントを持つインデックスを削除すると、データベース エンジンDatabase Engineは、トランザクションがコミットされるまで実際のページの割り当て解除と関連するロックを遅らせます。When indexes with 128 extents or more are dropped, the データベース エンジンDatabase Engine defers the actual page deallocations, and their associated locks, until after the transaction commits.

新しい FILL FACTOR 値を適用したり、一括読み取りの後でデータを再構成するためなどに、インデックスを削除し、作り直して、再構成または再構築することがあります。Sometimes indexes are dropped and re-created to reorganize or rebuild the index, such as to apply a new fill factor value or to reorganize data after a bulk load. これを行うには、特にクラスター化インデックスに対しては、ALTER INDEX を使用するのがより効率的です。To do this, using ALTER INDEXis more efficient, especially for clustered indexes. ALTER INDEX REBUILD は、非クラスター化インデックスを再構築するオーバーヘッドをなくすために最適化されています。ALTER INDEX REBUILD has optimizations to prevent the overhead of rebuilding the nonclustered indexes.

DROP INDEX でのオプションの使用Using Options with DROP INDEX

クラスター化インデックスを削除する際に、MAXDOP、ONLINE、MOVE TO インデックス オプションを設定できます。You can set the following index options when you drop a clustered index: MAXDOP, ONLINE, and MOVE TO.

MOVE TO は、単一のトランザクションでクラスター化インデックスを削除し、結果のテーブルを別のファイル グループまたはパーティション構成に移動するために使用します。Use MOVE TO to drop the clustered index and move the resulting table to another filegroup or partition scheme in a single transaction.

ONLINE = ON を指定すると、基となるデータや関連する非クラスター化インデックスに対するクエリと変更は、DROP INDEX トランザクションによってブロックされません。When you specify ONLINE = ON, queries and modifications to the underlying data and associated nonclustered indexes are not blocked by the DROP INDEX transaction. オンラインでは、一度に 1 つのクラスター化インデックスしか削除できません。Only one clustered index can be dropped online at a time. ONLINE オプションの詳細な説明については、「CREATE INDEX (Transact-SQL)」を参照してください。For a complete description of the ONLINE option, see CREATE INDEX (Transact-SQL).

インデックスがビュー上で無効になっているか、リーフ レベルのデータ行に textntextimagevarchar(max)nvarchar(max)varbinary(max) 、または xml 列を含む場合には、クラスター化インデックスをオンラインで削除することはできません。You cannot drop a clustered index online if the index is disabled on a view, or contains text, ntext, image, varchar(max), nvarchar(max), varbinary(max), or xml columns in the leaf-level data rows.

ONLINE = ON オプションおよび MOVE TO オプションを使用するには、追加の一時ディスク領域が必要です。Using the ONLINE = ON and MOVE TO options requires additional temporary disk space.

インデックスを削除すると、結果のヒープは、sys.indexes カタログ ビューで name 列が NULL として表示されます。After an index is dropped, the resulting heap appears in the sys.indexes catalog view with NULL in the name column. テーブル名を表示するには、sys.indexessys.tablesobject_id で結合します。To view the table name, join sys.indexes with sys.tables on object_id. クエリの例については、例 D を参照してください。For an example query, see example D.

SQL Server 2005 Enterprise EditionSQL Server 2005 Enterprise Edition 以降を実行するマルチプロセッサ コンピューターでは、他のクエリと同様に、クラスター化インデックスの削除に関連するスキャン操作や並べ替え操作の実行に、DROP INDEX がより多くのプロセッサを使用する場合があります。On multiprocessor computers that are running SQL Server 2005 Enterprise EditionSQL Server 2005 Enterprise Edition or later, DROP INDEX may use more processors to perform the scan and sort operations associated with dropping the clustered index, just like other queries do. MAXDOP インデックス オプションを指定すると、DROP INDEX ステートメントの実行に使用されるプロセッサ数を手動で構成できます。You can manually configure the number of processors that are used to run the DROP INDEX statement by specifying the MAXDOP index option. 詳細については、「 並列インデックス操作の構成」を参照してください。For more information, see Configure Parallel Index Operations.

クラスター化インデックスを削除する場合、パーティション構成を変更しない限り、対応するヒープ パーティションでデータ圧縮設定が維持されます。When a clustered index is dropped, the corresponding heap partitions retain their data compression setting unless the partitioning scheme is modified. パーティション構成を変更すると、すべてのパーティションが圧縮されていない状態に再構築されます (DATA_COMPRESSION = NONE)。If the partitioning scheme is changed, all partitions are rebuilt to an uncompressed state (DATA_COMPRESSION = NONE). クラスター化インデックスを削除し、パーティション構成を変更するには、次の 2 つの手順が必要です。To drop a clustered index and change the partitioning scheme requires the following two steps:

  1. クラスター化インデックスを削除します。Drop the clustered index.

  2. 圧縮オプションを指定する ALTER TABLE ...REBUILD ... オプションを使用して、テーブルを変更します。Modify the table by using an ALTER TABLE ... REBUILD ... option specifying the compression option.

OFFLINE でクラスター化インデックスを削除すると、クラスター化インデックスの上位レベルだけが削除されます。そのため、操作はとても高速です。When a clustered index is dropped OFFLINE, only the upper levels of clustered indexes are removed; therefore, the operation is quite fast. ONLINE でクラスター化インデックスを削除すると、SQL ServerSQL Server によって、ヒープが手順 1. で 1 回、手順 2. で 1 回の計 2 回再構築されます。When a clustered index is dropped ONLINE, SQL ServerSQL Server rebuilds the heap two times, once for step 1 and once for step 2. データ圧縮の詳細については、「データの圧縮」を参照してください。For more information about data compression, see Data Compression.

XML インデックスXML Indexes

AnXML インデックスを削除するときに、オプションを指定することはできません。Options cannot be specified when you drop anXML index. また、table_or_view_name . index_name 構文を使用することはできません。Also, you cannot use the table_or_view_name.index_name syntax. プライマリ XML インデックスを削除すると、関連するすべてのセカンダリ XML インデックスが自動的に削除されます。When a primary XML index is dropped, all associated secondary XML indexes are automatically dropped. 詳細については、「XML インデックス (SQL Server)」をご覧ください。For more information, see XML Indexes (SQL Server).

空間インデックスSpatial Indexes

空間インデックスはテーブルでのみサポートされます。Spatial indexes are supported only on tables. 空間インデックスを削除する場合、オプションを指定することも、 . index_name を使用することもできません。When you drop a spatial index, you cannot specify any options or use .index_name. 正しい構文は次のとおりです。The correct syntax is as follows:

DROP INDEX spatial_index_name ON spatial_table_name;DROP INDEX spatial_index_name ON spatial_table_name;

空間インデックスについて詳しくは、「空間インデックスの概要」を参照してください。For more information about spatial indexes, see Spatial Indexes Overview.

アクセス許可Permissions

DROP INDEX を実行するには、少なくとも、テーブルまたはビューの ALTER 権限が必要です。To execute DROP INDEX, at a minimum, ALTER permission on the table or view is required. この権限は、固定サーバー ロール sysadmin と、固定データベース ロール db_ddladmin および db_owner に既定で許可されています。This permission is granted by default to the sysadmin fixed server role and the db_ddladmin and db_owner fixed database roles.

使用例Examples

A.A. インデックスを削除するDropping an index

次の例では、AdventureWorks2012AdventureWorks2012 データベースにある ProductVendor テーブルの IX_ProductVendor_VendorID インデックスを削除します。The following example deletes the index IX_ProductVendor_VendorID on the ProductVendor table in the AdventureWorks2012AdventureWorks2012 database.

DROP INDEX IX_ProductVendor_BusinessEntityID   
    ON Purchasing.ProductVendor;  
GO  

B.B. 複数のインデックスを削除するDropping multiple indexes

次の例では、AdventureWorks2012AdventureWorks2012 データベースから、単一のトランザクションで 2 つのインデックスを削除します。The following example deletes two indexes in a single transaction in the AdventureWorks2012AdventureWorks2012 database.

DROP INDEX  
    IX_PurchaseOrderHeader_EmployeeID ON Purchasing.PurchaseOrderHeader,  
    IX_Address_StateProvinceID ON Person.Address;  
GO  

C.C. クラスター化インデックスをオンラインで削除し、MAXDOP オプションを設定するDropping a clustered index online and setting the MAXDOP option

次の例では、ONLINE オプションに ON を設定し、MAXDOP オプションに 8 を設定してクラスター化インデックスを削除します。The following example deletes a clustered index with the ONLINE option set to ON and MAXDOP set to 8. MOVE TO オプションは指定していないため、結果のテーブルは、インデックスと同じファイル グループに格納されます。Because the MOVE TO option was not specified, the resulting table is stored in the same filegroup as the index. この例では AdventureWorks2012AdventureWorks2012 データベースを使用しますThis examples uses the AdventureWorks2012AdventureWorks2012 database

適用対象: SQL Server 2008SQL Server 2008 から SQL Server 2017SQL Server 2017SQL DatabaseSQL DatabaseApplies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017, SQL DatabaseSQL Database.

DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate   
    ON Production.BillOfMaterials WITH (ONLINE = ON, MAXDOP = 2);  
GO  

D.D. クラスター化インデックスをオンラインで削除し、テーブルを新しいファイル グループに移動するDropping a clustered index online and moving the table to a new filegroup

次の例では、クラスター化インデックスをオンラインで削除し、 NewGroup 句を使用することで、結果のテーブル (ヒープ) をファイル グループ MOVE TO に移動します。The following example deletes a clustered index online and moves the resulting table (heap) to the filegroup NewGroup by using the MOVE TO clause. 移動の前後で sys.indexessys.tables、および sys.filegroups カタログ ビューを参照し、ファイル グループ内のインデックスとテーブルの配置を確認します。The sys.indexes, sys.tables, and sys.filegroups catalog views are queried to verify the index and table placement in the filegroups before and after the move. (以降で SQL Server 2016 (13.x)SQL Server 2016 (13.x) インデックス IF EXISTS の DROP 構文を使用することができます)。(Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x) you can use the DROP INDEX IF EXISTS syntax.)

適用対象: SQL Server 2008SQL Server 2008 から SQL Server 2017SQL Server 2017Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

--Create a clustered index on the PRIMARY filegroup if the index does not exist.  
CREATE UNIQUE CLUSTERED INDEX  
    AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate   
        ON Production.BillOfMaterials (ProductAssemblyID, ComponentID,   
        StartDate)  
    ON 'PRIMARY';  
GO  
-- Verify filegroup location of the clustered index.  
SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,  
    i.data_space_id, f.name AS [Filegroup Name]  
FROM sys.indexes AS i  
    JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id  
    JOIN sys.tables as t ON i.object_id = t.object_id  
        AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U')  
GO  
--Create filegroup NewGroup if it does not exist.  
IF NOT EXISTS (SELECT name FROM sys.filegroups  
                WHERE name = N'NewGroup')  
    BEGIN  
    ALTER DATABASE AdventureWorks2012  
        ADD FILEGROUP NewGroup;  
    ALTER DATABASE AdventureWorks2012  
        ADD FILE (NAME = File1,  
            FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\File1.ndf')  
        TO FILEGROUP NewGroup;  
    END  
GO  
--Verify new filegroup  
SELECT * from sys.filegroups;  
GO  
-- Drop the clustered index and move the BillOfMaterials table to  
-- the Newgroup filegroup.  
-- Set ONLINE = OFF to execute this example on editions other than Enterprise Edition.  
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate   
    ON Production.BillOfMaterials   
    WITH (ONLINE = ON, MOVE TO NewGroup);  
GO  
-- Verify filegroup location of the moved table.  
SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,  
    i.data_space_id, f.name AS [Filegroup Name]  
FROM sys.indexes AS i  
    JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id  
    JOIN sys.tables as t ON i.object_id = t.object_id  
        AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U');  
GO  

E.E. PRIMARY KEY 制約をオンラインで削除するDropping a PRIMARY KEY constraint online

PRIMARY KEY 制約や UNIQUE 制約の結果作成されたインデックスは、DROP INDEX を使用して削除することができません。Indexes that are created as the result of creating PRIMARY KEY or UNIQUE constraints cannot be dropped by using DROP INDEX. そのようなインデックスは、ALTER TABLE DROP CONSTRAINT ステートメントを使用して削除します。They are dropped using the ALTER TABLE DROP CONSTRAINT statement. 詳細については、「ALTER TABLE」を参照してください。For more information, see ALTER TABLE.

次の例では、制約を削除することで、PRIMARY KEY 制約によるクラスター化インデックスを削除します。The following example deletes a clustered index with a PRIMARY KEY constraint by dropping the constraint. ProductCostHistory テーブルには FOREIGN KEY 制約はありません。The ProductCostHistory table has no FOREIGN KEY constraints. それがある場合には、まずそれらの制約を削除する必要があります。If it did, those constraints would have to be removed first.

-- Set ONLINE = OFF to execute this example on editions other than Enterprise Edition.  
ALTER TABLE Production.TransactionHistoryArchive  
DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID  
WITH (ONLINE = ON);  

F.F. XML インデックスを削除するDropping an XML index

次の例では、AdventureWorks2012AdventureWorks2012 データベースにある ProductModel テーブルの XML インデックスを削除します。The following example drops an XML index on the ProductModel table in the AdventureWorks2012AdventureWorks2012 database.

DROP INDEX PXML_ProductModel_CatalogDescription   
    ON Production.ProductModel;  

G.G. FILESTREAM テーブルのクラスター化インデックスを削除するDropping a clustered index on a FILESTREAM table

次の例では、クラスター化インデックスをオンラインで削除し、MyPartitionScheme 句と MOVE TO 句の両方を使用して、結果のテーブル (ヒープ) と FILESTREAM データを FILESTREAM ON パーティション構成に移動します。The following example deletes a clustered index online and moves the resulting table (heap) and FILESTREAM data to the MyPartitionScheme partition scheme by using both the MOVE TO clause and the FILESTREAM ON clause.

適用対象: SQL Server 2008SQL Server 2008 から SQL Server 2017SQL Server 2017Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

DROP INDEX PK_MyClusteredIndex   
    ON dbo.MyTable   
    WITH (MOVE TO MyPartitionScheme,  
          FILESTREAM_ON MyPartitionScheme);  
GO  

参照See Also

ALTER INDEX (Transact-SQL) ALTER INDEX (Transact-SQL)
ALTER PARTITION SCHEME (Transact-SQL) ALTER PARTITION SCHEME (Transact-SQL)
ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
CREATE PARTITION SCHEME (Transact-SQL) CREATE PARTITION SCHEME (Transact-SQL)
CREATE SPATIAL INDEX (Transact-SQL) CREATE SPATIAL INDEX (Transact-SQL)
CREATE XML INDEX (Transact-SQL) CREATE XML INDEX (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
sys.indexes (Transact-SQL) sys.indexes (Transact-SQL)
sys.tables (Transact-SQL) sys.tables (Transact-SQL)
sys.filegroups (Transact-SQL) sys.filegroups (Transact-SQL)
sp_spaceused (Transact-SQL)sp_spaceused (Transact-SQL)