인덱스 삭제
인덱스가 더 이상 필요하지 않을 때는 데이터베이스에서 제거하여 인덱스가 현재 사용하는 디스크 공간을 반환할 수 있습니다. 그러면 데이터베이스의 개체가 반환된 공간을 사용할 수 있습니다. 인덱스 삭제와 인덱스 제거는 동의어입니다.
제약 조건을 삭제하지 않고서는 PRIMARY KEY 또는 UNIQUE 제약 조건에서 사용하는 인덱스를 삭제할 수 없습니다. 예를 들어 인덱스를 수정하여 인덱스가 사용하는 채우기 비율 값을 수정하려면 기본적으로 PRIMARY KEY 또는 UNIQUE 제약 조건을 삭제한 후 다시 만들지 않고 해당 제약 조건에 사용되는 인덱스를 삭제한 후 다시 만들 수 있습니다. 인덱스를 다시 작성하는 방법은 인덱스 다시 구성 및 다시 작성을 참조하십시오.
인덱스를 삭제한 후 다시 만들지 않고 인덱스를 다시 작성하는 방법은 클러스터형 인덱스를 다시 만들 때 유용합니다. 데이터가 이미 정렬되어 있으면 인덱스를 다시 작성하는 과정에서 인덱스 열별로 데이터를 정렬할 필요가 없기 때문입니다.
모든 뷰나 영구 및 임시 테이블에서 만든 인덱스는 뷰나 테이블이 삭제될 때 자동으로 삭제됩니다.
[!참고]
테이블에 대해 ALTER 권한이 있는 경우 인덱스를 삭제할 수 있습니다.
클러스터형 인덱스
클러스터형 인덱스를 삭제하면 클러스터형 인덱스의 리프 수준에 저장된 데이터 행이 정렬되지 않은 테이블(힙)에 저장됩니다. 클러스터형 인덱스를 삭제하는 작업은 클러스터형 인덱스를 삭제하는 것 외에도 클러스터형 인덱스 키를 힙에 대한 행 포인터로 바꾸기 위해 테이블의 모든 비클러스터형 인덱스를 다시 작성해야 하기 때문에 시간이 걸릴 수 있습니다. 테이블의 모든 인덱스를 삭제하려면 비클러스터형 인덱스를 먼저 삭제하고 클러스터형 인덱스를 마지막으로 삭제합니다. 그러면 인덱스를 다시 작성하지 않아도 됩니다. 클러스터형 인덱스와 비클러스터형 인덱스 간의 관계에 대한 자세한 내용은 비클러스터형 인덱스 구조를 참조하십시오.
온라인 삭제 작업 도중이나 MOVE TO 절을 지정할 때 클러스터형 인덱스를 삭제하려면 임시 디스크 공간이 필요합니다. 자세한 내용은 인덱스 DDL 작업의 디스크 공간 요구 사항을 참조하십시오.
인덱싱된 뷰의 클러스터형 인덱스를 삭제하면 해당 뷰의 모든 비클러스터형 인덱스와 자동 생성된 통계가 자동으로 삭제됩니다. 수동으로 생성된 통계는 삭제되지 않습니다.
MOVE TO 절 사용
클러스터형 인덱스를 삭제하고 MOVE TO 옵션을 지정하여 정렬되지 않은 테이블(힙) 결과를 단일 트랜잭션으로 다른 파일 그룹이나 파티션 구성표로 이동할 수 있습니다. MOVE TO 옵션에는 다음과 같은 제한이 있습니다.
인덱싱된 뷰나 비클러스터형 인덱스에는 사용할 수 없습니다.
지정된 파티션 구성표나 파일 그룹이 이미 존재해야 합니다.
MOVE TO를 지정하지 않으면 클러스터형 인덱스에 대해 정의된 것처럼 결과 테이블이 동일한 파티션 구성표나 파일 그룹에 위치합니다.
클러스터형 인덱스 온라인 삭제
클러스터형 인덱스를 삭제할 때 ONLINE 옵션을 지정할 수 있습니다. ON으로 설정하면 DROP INDEX 트랜잭션이 기본 데이터 및 연결된 비클러스터형 인덱스에 대한 쿼리와 수정을 차단하지 않습니다. 자세한 내용은 온라인으로 인덱스 작업 수행을 참조하십시오.
ON으로 설정한 경우 ONLINE 옵션에는 다음과 같은 제한이 있습니다.
한 번에 하나의 인덱스만 삭제할 수 있습니다.
비활성화된 클러스터형 인덱스에는 사용할 수 없습니다.
뷰의 클러스터형 인덱스 또는 테이블이나 뷰의 비클러스터형 인덱스에는 사용할 수 없습니다.
리프 수준의 데이터 행에 있는 text, ntext, image, varchar(max), nvarchar(max), varbinary(max) 또는 xml 열을 포함하는 클러스터형 인덱스를 온라인 삭제할 수 없습니다.
MAXDOP 인덱스 옵션 설정
MAXDOP 인덱스 옵션을 지정하여 인덱스 삭제 작업에 대한 sp_configure의 max degree of parallelism 구성 옵션을 무시할 수 있습니다. 자세한 내용은 병렬 인덱스 작업 구성을 참조하십시오.
전체 텍스트 인덱스
테이블의 전체 텍스트 키로 지정된 인덱스는 삭제할 수 없습니다. 인덱스가 전체 텍스트 키인지 여부를 확인하려면 인덱스 속성을 보십시오. 자세한 내용은 NDEXPROPERTY(Transact-SQL)를 참조하십시오.
인덱스를 삭제하려면
예
1. 인덱스 삭제
다음 예에서는 ProductVendor 테이블의 IX_ProductVendor_VendorID 인덱스를 삭제합니다.
USE AdventureWorks;
GO
DROP INDEX IX_ProductVendor_VendorID
ON Purchasing.ProductVendor;
GO
2. ONLINE 모드에서 클러스터형 인덱스 삭제
다음 예에서는 ONLINE 옵션이 ON으로 설정된 클러스터형 인덱스를 삭제합니다. 정렬되지 않은 결과 테이블(힙)은 인덱스가 저장된 것과 동일한 파일 그룹에 저장됩니다.
USE AdventureWorks;
GO
DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate
ON Production.BillOfMaterials WITH (ONLINE = ON, MAXDOP = 2);
GO