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

적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) 예Azure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database 예Azure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance 예Azure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics 예병렬 데이터 웨어하우스Parallel Data Warehouseyes병렬 데이터 웨어하우스Parallel Data Warehouse적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) 예Azure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database 예Azure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance 예Azure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics 예병렬 데이터 웨어하우스Parallel Data Warehouseyes병렬 데이터 웨어하우스Parallel Data Warehouse

현재 데이터베이스에서 하나 이상의 관계형 인덱스, 공간 인덱스, 필터링된 인덱스 또는 XML 인덱스를 제거합니다.Removes one or more relational, spatial, filtered, or XML indexes from the current database. 클러스터형 인덱스를 삭제하고 MOVE TO 옵션을 지정하여 결과 테이블을 단일 트랜잭션으로 다른 파일 그룹이나 파티션 구성표로 이동할 수 있습니다.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. 제약 조건과 해당 인덱스를 제거하려면 DROP CONSTRAINT 절과 함께 ALTER TABLE을 사용합니다.To remove the constraint and corresponding index, use ALTER TABLE with the DROP CONSTRAINT clause.

중요

<drop_backward_compatible_index>에 정의된 구문은 MicrosoftMicrosoftSQL 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 }  
[;]  

참고

SQL Server 2014 이전 버전의 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조하세요.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

인수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.

database_name이 현재 데이터베이스이거나 database_name이 tempdb이고 object_name이 #으로 시작하는 경우 Azure SQL Database는 세 부분으로 구성된 이름 형식 database_name.[schema_name].object_name을 지원합니다.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>
적용 대상: SQL Server 2008SQL Server 2008 이상, SQL DatabaseSQL Database.Applies to: SQL Server 2008SQL Server 2008 and later, 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 DatabaseSQL Database(성능 수준 P2 및 P3만 해당)Applies to: SQL Server 2008SQL Server 2008 and later, 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.

중요

공간 인덱스 또는 XML 인덱스에서는 MAXDOP를 사용할 수 없습니다.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 버전에서 지원되는 기능 목록은 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 이상, Azure SQL DatabaseAzure SQL Database.Applies to: SQL Server 2008SQL Server 2008 and later, Azure SQL DatabaseAzure 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.

켜기ON
장기 테이블 잠금이 유지되지 않습니다.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 버전에서 지원되는 기능 목록은 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 이상Applies to: SQL Server 2008SQL Server 2008 and later. 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 DatabaseSQL Database.Applies to: SQL Server 2008SQL Server 2008 and later, 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 이상Applies to: SQL Server 2008SQL Server 2008 and later.

파일 그룹을 결과 테이블의 위치로 지정합니다.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 이상Applies to: SQL Server 2008SQL Server 2008 and later.

현재 클러스터형 인덱스의 리프 수준에 있는 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).

설명Remarks

비클러스터형 인덱스를 삭제하면 인덱스 정의가 메타데이터에서 제거되고 인덱스 데이터 페이지(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.

인덱스를 다시 구성 또는 다시 작성하기 위해 인덱스를 삭제하고 다시 만드는 경우도 있습니다. 예를 들면 새 채우기 비율 값을 적용하거나 대량 로드 후 데이터를 다시 구성하기 위해서입니다.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. 클러스터형 인덱스는 한 번에 한 개씩만 온라인으로 삭제할 수 있습니다.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).

뷰에서 인덱스가 비활성화되어 있거나 리프 수준 데이터 행에 text, ntext, image, varchar(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. 테이블 이름을 보려면 object_id에서 sys.indexessys.tables을 조인합니다.To view the table name, join sys.indexes with sys.tables on object_id. 쿼리 예는 예 1을 참조하세요.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). 클러스터형 인덱스를 삭제하고 파티션 구성표를 변경하려면 다음 두 단계를 수행해야 합니다.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단계와 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

XML 인덱스를 삭제할 때는 옵션을 지정할 수 없습니다.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_ddladmindb_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 데이터베이스에서 하나의 트랜잭션으로 두 개의 인덱스를 삭제합니다.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으로 설정하고 MAXDOP8로 설정해 클러스터형 인덱스를 삭제합니다.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 DatabaseSQL Database.Applies to: SQL Server 2008SQL Server 2008 and later, 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.indexes, sys.tablessys.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)부터는 DROP INDEX IF EXISTS 구문을 사용할 수 있습니다.)(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 이상Applies to: SQL Server 2008SQL Server 2008 and later.

--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 이상Applies to: SQL Server 2008SQL Server 2008 and later.

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)