적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric의 SQL 데이터베이스
이 문서에서는 SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server에서 비활성화된 인덱스를 사용하도록 설정하는 방법을 설명합니다. 인덱스를 사용하지 않도록 설정한 후에는 다시 작성되거나 삭제될 때까지 비활성화된 상태로 유지됩니다.
Limitations
인덱스를 다시 빌드한 후, 인덱스를 사용하지 않도록 설정하여 비활성화된 제약 조건을 수동으로 다시 활성화해야 합니다.
PRIMARY KEY 및 UNIQUE 제약 조건은 연결된 인덱스를 다시 작성하여 사용하도록 설정됩니다. 먼저 FOREIGN KEY 또는 PRIMARY KEY 제약 조건을 참조하는 제약 조건을 사용하도록 설정하기 전에 이 인덱스를 다시 구축 (사용 가능)해야 합니다.
FOREIGN KEY 제약 조건은 ALTER TABLE CHECK CONSTRAINT 문을 사용하여 활성화됩니다.
비활성화된 클러스터형 인덱스를 다시 작성할 수 없습니다. ONLINE 옵션이 설정된 경우 ON.
클러스터형 인덱스가 비활성화되거나 활성화되어 있고 비클러스터형 인덱스가 비활성화된 경우 클러스터형 인덱스 작업에는 비클러스터형 인덱스가 비활성화된 다음 결과가 표시됩니다.
| 클러스터형 인덱스 작업 | 비클러스터형 인덱스 상태를 사용하지 않도록 설정 |
|---|---|
ALTER INDEX REBUILD |
사용 안 함 상태로 유지 |
ALTER INDEX ALL REBUILD |
다시 구축하고 활성화 |
DROP INDEX |
다시 구축하고 활성화 |
CREATE INDEX WITH DROP_EXISTING |
사용 안 함 상태로 유지 |
새 클러스터형 인덱스를 만드는 것은 .와 동일하게 ALTER INDEX ALL REBUILD동작합니다.
클러스터형 인덱스와 연결된 비클러스터형 인덱스에 대해 허용되는 작업은 두 인덱스 형식의 사용 안 함 또는 사용 여부에 따라 달라집니다. 다음 표에는 비클러스터형 인덱스에 대해 허용되는 작업이 요약되어 있습니다.
| 비클러스터형 인덱스 작업 | 클러스터형 인덱스와 비클러스터형 인덱스를 모두 사용할 수 없는 경우 | 클러스터형 인덱스가 활성화되고 비클러스터형 인덱스가 두 상태 중 하나에 있는 경우 |
|---|---|---|
ALTER INDEX REBUILD |
작업이 실패함 | 작업이 성공합니다. |
DROP INDEX |
작업이 성공합니다. | 작업이 성공합니다. |
CREATE INDEX WITH DROP_EXISTING |
작업이 실패함 | 작업이 성공합니다. |
비활성화된 압축된 비클러스터형 인덱스를 data_compression 다시 빌드할 때 기본값 none은 인덱스가 압축되지 않음을 의미합니다. 비클러스터형 인덱스가 비활성 상태가 되면 압축 설정 메타데이터가 손실되기 때문입니다. 이 문제를 해결하려면 rebuild 문에서 명시적 데이터 압축을 지정해야 합니다.
Permissions
테이블 또는 보기에 대한 ALTER 권한이 필요합니다. 사용하려면 DBCC DBREINDEX를 소유하거나 sysadmin 고정 서버 역할의 구성원, 또는 db_ddladmin 또는 db_owner 고정 데이터베이스 역할의 구성원이어야 합니다.
SQL Server Management Studio 사용
비활성화된 인덱스 사용
개체 탐색기에서 더하기 기호를 선택하여 인덱스를 사용하도록 설정할 테이블이 포함된 데이터베이스를 확장합니다.
더하기 기호를 선택하여 테이블 폴더를 확장합니다.
더하기 기호를 선택하여 인덱스 사용하려는 테이블을 확장합니다.
더하기 기호를 선택하여 인덱스 폴더를 확장합니다.
활성화할 인덱스를 마우스 오른쪽 단추로 클릭하고 다시 작성을 선택합니다.
인덱스 다시 빌드 대화 상자에서 다시 빌드할 인덱스 약식 표에 올바른 인덱스가 있는지 확인한 다음 확인을 선택합니다.
테이블에서 모든 인덱스를 활성화
개체 탐색기에서 더하기 기호를 선택하여 인덱스를 사용하도록 설정할 테이블이 포함된 데이터베이스를 확장합니다.
더하기 기호를 선택하여 테이블 폴더를 확장합니다.
더하기 기호를 선택하여 인덱스를 사용하도록 설정할 테이블을 확장합니다.
인덱스 폴더를 마우스 오른쪽 단추로 클릭하고 모두 다시 빌드를 선택합니다.
인덱스 다시 작성 대화 상자에서 올바른 인덱스가 인덱스에 있는지 확인하고 그리드를 다시 빌드하고 확인을 선택합니다. 다시 빌드할 인덱스 표에서 인덱스를 제거하려면 인덱스를 선택한 다음 Delete 키를 누릅니다.
인덱스 다시 빌드 대화 상자에서는 다음 정보를 사용할 수 있습니다.
Transact-SQL 사용
이 문서의 코드 샘플은 AdventureWorks2025 또는 AdventureWorksDW2025 샘플 데이터베이스를 사용합니다. 이 데이터베이스는 Microsoft SQL Server 샘플 및 커뮤니티 프로젝트 홈페이지에서 다운로드할 수 있습니다.
ALTER INDEX를 사용하여 비활성화된 인덱스 사용
다음 Transact-SQL 스크립트를 실행합니다. 이 예제에서는 IX_Employee_OrganizationLevel_OrganizationNode 인덱스를 HumanResources.Employee 테이블에서 사용하도록 설정합니다.
USE AdventureWorks2022;
GO
ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode
ON HumanResources.Employee REBUILD;
GO
CREATE INDEX를 사용하여 비활성화된 인덱스 사용
다음 Transact-SQL 스크립트를 실행합니다. 다음은 IX_Employee_OrganizationLevel_OrganizationNode 테이블에서 HumanResources.Employee 및 OrganizationLevel 열을 사용하여 인덱스를 다시 만든 다음 기존 OrganizationNode 인덱스를 삭제하는 예제입니다.
USE AdventureWorks2022;
GO
CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode
ON HumanResources.Employee(OrganizationLevel, OrganizationNode) WITH (DROP_EXISTING = ON);
GO
DBCC DBREINDEX를 사용하여 비활성화된 인덱스 사용
Note
이 기능은 이후 버전의 SQL Server에서 제거됩니다. 새 개발 작업에서 이 기능을 사용하지 말고 현재 이 기능을 사용하는 애플리케이션을 수정할 계획입니다.
다음 Transact-SQL 스크립트를 실행합니다. 이 예제에서는 IX_Employee_OrganizationLevel_OrganizationNode 인덱스를 HumanResources.Employee 테이블에서 사용하도록 설정합니다.
USE AdventureWorks2022;
GO
DBCC DBREINDEX ("HumanResources.Employee", IX_Employee_OrganizationLevel_OrganizationNode);
GO
ALTER INDEX를 사용하여 테이블에서 모든 인덱스 사용
다음 Transact-SQL 스크립트를 실행합니다. 이 예제에서는 테이블의 모든 인덱스를 HumanResources.Employee 사용하도록 설정합니다.
USE AdventureWorks2022;
GO
ALTER INDEX ALL
ON HumanResources.Employee REBUILD;
GO
DBCC DBREINDEX를 사용하여 테이블의 모든 인덱스 사용
Note
이 기능은 이후 버전의 SQL Server에서 제거됩니다. 새 개발 작업에서 이 기능을 사용하지 말고 현재 이 기능을 사용하는 애플리케이션을 수정할 계획입니다.
다음 Transact-SQL 스크립트를 실행합니다. 이 예제에서는 테이블의 모든 인덱스를 HumanResources.Employee 사용하도록 설정합니다.
USE AdventureWorks2022;
GO
DBCC DBREINDEX ("HumanResources.Employee", " ");
GO