DBCC DBREINDEX(Transact-SQL)
적용 대상: SQL Server Azure SQL Managed Instance
지정한 데이터베이스의 테이블에 대해 하나 이상의 인덱스를 다시 작성합니다.
Important
SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요. 대신 ALTER INDEX를 사용합니다.
적용 대상: SQL Server 2008(10.0.x) 이상 버전
구문
DBCC DBREINDEX
(
table_name
[ , index_name [ , fillfactor ] ]
)
[ WITH NO_INFOMSGS ]
인수
table_name
다시 작성할 지정 인덱스를 포함하는 테이블의 이름입니다. 테이블 이름은 식별자에 적용되는 규칙을 따라야 합니다.
index_name
다시 작성할 인덱스의 이름입니다. 인덱스 이름은 식별자에 대한 규칙을 따라야 합니다. index_name을 지정한 경우 table_name을 지정해야 합니다. index_name을 지정하지 않거나 해당 이름이 ' '
이면 테이블의 모든 인덱스가 다시 작성됩니다.
fillfactor
인덱스를 만들거나 다시 작성할 때 데이터를 저장하는 데 사용할 각 인덱스 페이지의 공간에 대한 백분율입니다. fillfactor는 인덱스 생성 시 채우기 비율을 대체하여 클러스터형 인덱스를 다시 작성하기 때문에 다시 작성되는 인덱스 및 다른 모든 비클러스터형 인덱스의 새 기본값이 됩니다.
fillfactor가 0인 경우 DBCC DBREINDEX
는 인덱스에 최근 지정한 채우기 비율 값을 사용합니다. 이 값은 sys.indexes
카탈로그 뷰에 저장됩니다.
fillfactor를 지정한 경우 table_name 및 index_name을 지정해야 합니다. fillfactor를 지정하지 않으면 기본 채우기 비율인 100이 사용됩니다. 자세한 내용은 인덱스의 채우기 비율 지정을 참조하세요.
WITH NO_INFOMSGS
심각도가 0에서 10 사이인 모든 정보 메시지를 표시하지 않습니다.
설명
DBCC DBREINDEX
는 테이블의 특정 인덱스나 테이블에 정의된 모든 인덱스를 다시 작성합니다. DBCC DBREINDEX는 인덱스를 동적으로 다시 작성할 수 있도록 하므로 PRIMARY KEY나 UNIQUE 제약 조건을 보장하는 인덱스를 다시 작성할 때 기존 제약 조건을 삭제하고 다시 만들 필요가 없습니다. 이는 테이블의 구조나 해당 제약 조건에 대한 정보가 없이도 인덱스를 다시 작성할 수 있음을 의미합니다. 이 과정은 테이블로 데이터를 대량 복사한 후 발생할 수 있습니다.
DBCC DBREINDEX
를 사용하면 하나의 문으로 한 테이블에 대한 모든 인덱스를 다시 작성할 수 있으며 이는 DROP INDEX
및 CREATE INDEX
문을 여러 번 코딩하는 것보다 쉽습니다. 각 DROP INDEX
및 CREATE INDEX
문이 원자성을 가지려면 트랜잭션을 사용해야 하는 반면 DBCC DBREINDEX
는 하나의 문에서 작업이 수행되므로 자동으로 원자성을 갖습니다. 또한 DBCC DBREINDEX
는 개별 DROP INDEX
및 CREATE INDEX
문보다 더 많은 최적화를 제공합니다.
DBCC INDEXDEFRAG
또는 REORGANIZE
옵션이 있는 ALTER INDEX
와 달리 DBCC DBREINDEX
는 오프라인 작업입니다. 비클러스터형 인덱스를 다시 작성하는 경우 작업 중에 해당 테이블에 공유 잠금이 유지됩니다. 이렇게 하면 테이블을 수정할 수 없습니다. 클러스터형 인덱스를 다시 작성하는 경우 배타적 테이블 잠금이 설정됩니다. 이 작업은 테이블에 액세스할 수 없게 하므로 결과적으로 테이블을 오프라인 상태로 만듭니다. 온라인 상태로 인덱스를 다시 작성하거나 인덱스 다시 작성 작업 중에 병렬 처리 수준을 제어하려면 ALTER INDEX REBUILD
문에 ONLINE
옵션을 사용합니다.
인덱스를 다시 작성하거나 다시 구성하는 방법을 선택하는 데 대한 자세한 내용은 인덱스 다시 구성 및 다시 작성을 참조하세요.
제한
DBCC DBREINDEX
는 다음 개체에서 사용할 수 없습니다.
- 시스템 테이블
- 공간 인덱스
- 메모리 최적화 columnstore 인덱스
결과 집합
NO_INFOMSGS
가 지정되지 않은 한(테이블 이름이 지정되어야 함), DBCC DBREINDEX
는 항상 다음을 반환합니다.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
사용 권한
호출자는 테이블을 소유하거나, sysadmin 고정 서버 역할, db_owner 고정 데이터베이스 역할 또는 db_ddladmin 고정 데이터베이스 역할의 멤버여야 합니다.
예
A. 인덱스 다시 작성
다음 예에서는 Employee_EmployeeID
데이터베이스의 80
테이블에 채우기 비율 Employee
의 AdventureWorks2022
클러스터형 인덱스를 다시 작성하는 방법을 보여 줍니다.
USE AdventureWorks2022;
GO
DBCC DBREINDEX ('HumanResources.Employee', PK_Employee_BusinessEntityID, 80);
GO
B. 모든 인덱스 다시 작성
다음 예에서는 채우기 비율 값 Employee
을 사용하여 AdventureWorks2022
의 70
테이블에서 모든 인덱스를 다시 작성하는 방법을 보여 줍니다.
USE AdventureWorks2022;
GO
DBCC DBREINDEX ('HumanResources.Employee', ' ', 70);
GO