인덱스 및 제약 조건 사용

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

이 항목에서는 SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server에서 비활성화된 인덱스를 사용하도록 설정하는 방법을 설명합니다. 비활성화된 인덱스는 다시 작성되거나 삭제될 때까지 비활성화된 상태로 유지됩니다.

항목 내용

시작하기 전에

제한 사항

  • 인덱스를 다시 빌드한 후 인덱스를 사용하지 않도록 설정하여 사용하지 않도록 설정된 모든 제약 조건을 수동으로 사용하도록 설정해야 합니다. PRIMARY KEY 및 UNIQUE 제약 조건은 연결된 인덱스를 다시 빌드하여 사용하도록 설정됩니다. PRIMARY KEY 또는 UNIQUE 제약 조건을 참조하는 FOREIGN KEY 제약 조건을 사용하도록 설정하려면 먼저 이 인덱스를 다시 작성(사용)해야 합니다. FOREIGN KEY 제약 조건은 ALTER TABLE CHECK CONSTRAINT 문을 사용하여 사용하도록 설정됩니다.

  • ONLINE 옵션이 ON으로 설정된 경우 비활성화된 클러스터형 인덱스를 다시 작성할 수 없습니다.

  • 클러스터형 인덱스가 비활성화되거나 활성화되어 있고 비클러스터형 인덱스가 비활성화된 경우 클러스터형 인덱스 작업에는 비클러스터형 인덱스가 비활성화된 다음 결과가 표시됩니다.

    클러스터형 인덱스 작업 비클러스터형 인덱스 사용 안 함...
    ALTER INDEX REBUILD. 비활성화된 상태로 유지됩니다.
    ALTER INDEX ALL REBUILD. 다시 빌드되고 사용하도록 설정됩니다.
    DROP INDEX. 비활성화된 상태로 유지됩니다.
    DROP_EXISTING 사용하여 인덱스 만들기 비활성화된 상태로 유지됩니다.

    새 클러스터형 인덱스를 만드는 것은 ALTER INDEX ALL REBUILD와 동일하게 동작합니다.

  • 클러스터형 인덱스와 연결된 비클러스터형 인덱스에 대해 허용되는 작업은 두 인덱스 형식의 사용 안 함 또는 사용 여부에 따라 달라집니다. 다음 표에는 비클러스터형 인덱스에 대해 허용되는 작업이 요약되어 있습니다.

    비클러스터형 인덱스 동작 클러스터형 인덱스와 비클러스터형 인덱스를 모두 사용할 수 없는 경우 클러스터형 인덱스가 활성화되고 비클러스터형 인덱스가 두 상태 중 하나에 있는 경우
    ALTER INDEX REBUILD. 작업이 실패합니다. 작업이 성공합니다.
    DROP INDEX. 작업이 성공합니다. 작업이 성공합니다.
    DROP_EXISTING 사용하여 인덱스 만들기 작업이 실패합니다. 작업이 성공합니다.
  • 사용되지 않는 압축된 비클러스터형 인덱스를 다시 빌드할 때 data_compression은 기본적으로 'none'으로 설정됩니다. 다시 말해서 인덱스가 압축되지 않습니다. 비클러스터형 인덱스를 사용하지 않도록 설정하면 압축 설정 메타데이터가 손실되기 때문입니다. 이 작업을 수행하려면 rebuild 문에서 명시적 데이터 압축을 지정해야 합니다.

보안

사용 권한

테이블이나 뷰에 대한 ALTER 권한이 필요합니다. DBCC DBREINDEX를 사용하는 경우 사용자는 테이블의 소유자이거나 sysadmin 고정 서버 역할 또는 db_ddladmindb_owner 고정 데이터베이스 역할의 멤버여야 합니다.

SQL Server Management Studio 사용

비활성화된 인덱스 사용

  1. 개체 탐색기에서 더하기 기호를 클릭하여 인덱스를 사용하도록 설정할 테이블이 포함된 데이터베이스를 확장합니다.

  2. 더하기 기호를 클릭하여 테이블 폴더를 확장합니다 .

  3. 더하기 기호를 클릭하여 인덱스를 활성화할 테이블을 확장합니다.

  4. 더하기 기호를 클릭하여 Indexes 폴더를 확장합니다 .

  5. 활성화할 인덱스를 마우스 오른쪽 단추로 클릭하고 다시 작성을 선택합니다.

  6. 인덱스 다시 작성 대화 상자에서 다시 작성할 인덱스 표에 올바른 인덱스가 있는지 확인한 다음 확인을 클릭합니다.

테이블에서 모든 인덱스를 사용하도록 설정하려면

  1. 개체 탐색기에서 더하기 기호를 클릭하여 인덱스를 사용하도록 설정할 테이블이 포함된 데이터베이스를 확장합니다.

  2. 더하기 기호를 클릭하여 테이블 폴더를 확장합니다 .

  3. 더하기 기호를 클릭하여 인덱스를 활성화할 테이블을 확장합니다.

  4. 인덱스 폴더를 마우스 오른쪽 단추로 클릭하고 모두 다시 작성을 선택합니다.

  5. 인덱스 다시 작성 대화 상자에서 올바른 인덱스가 인덱스에 있는지 확인하여 그리드를 다시 빌드하고 확인을 클릭합니다. 인덱스에서 인덱 스를 제거하여 그리드를 다시 작성하려면 인덱스를 선택한 다음 Delete 키를 누릅니다.

인덱스 다시 작성 대화 상자에서 다음 정보를 사용할 수 있습니다.

Transact-SQL 사용

ALTER INDEX를 사용하여 비활성화된 인덱스 사용

  1. 개체 탐색기에서 데이터베이스 엔진인스턴스에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.

    USE AdventureWorks2022;  
    GO  
    -- Enables the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table.  
    
    ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
    REBUILD;   
    GO  
    

CREATE INDEX를 사용하여 비활성화된 인덱스 사용

  1. 개체 탐색기에서 데이터베이스 엔진인스턴스에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.

    USE AdventureWorks2022;  
    GO  
    -- re-creates the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table  
    -- using the OrganizationLevel and OrganizationNode columns  
    -- and then deletes the existing IX_Employee_OrganizationLevel_OrganizationNode index  
    CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
       (OrganizationLevel, OrganizationNode)  
    WITH (DROP_EXISTING = ON);  
    GO  
    

DBCC DBREINDEX를 사용하여 비활성화된 인덱스를 활성화하려면

  1. 개체 탐색기에서 데이터베이스 엔진인스턴스에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.

    USE AdventureWorks2022;   
    GO  
    -- enables the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table  
    DBCC DBREINDEX ("HumanResources.Employee", IX_Employee_OrganizationLevel_OrganizationNode);  
    GO  
    

ALTER INDEX를 사용하여 테이블의 모든 인덱스를 활성화하려면

  1. 개체 탐색기에서 데이터베이스 엔진인스턴스에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.

    USE AdventureWorks2022;  
    GO  
    -- enables all indexes  
    -- on the HumanResources.Employee table  
    ALTER INDEX ALL ON HumanResources.Employee  
    REBUILD;  
    GO  
    

DBCC DBREINDEX를 사용하여 테이블에서 모든 인덱스를 사용하도록 설정하려면

  1. 개체 탐색기에서 데이터베이스 엔진인스턴스에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.

    USE AdventureWorks2022;   
    GO  
    -- enables all indexes  
    -- on the HumanResources.Employee table  
    DBCC DBREINDEX ("HumanResources.Employee", " ");  
    GO  
    

자세한 내용은 ALTER INDEX(Transact-SQL), CREATE INDEX(Transact-SQL)DBCC DBREINDEX(Transact-SQL)를 참조하세요.