인덱스 및 제약 조건 비활성화Disable Indexes and Constraints

이 항목은 다음에 적용됩니다. 예SQL Server(2016부터)예Azure SQL Database아니요Azure SQL Data Warehouse아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

이 항목에서는 SQL Server 2017SQL Server 2017 또는 SQL Server Management StudioSQL Server Management Studio 을 사용하여 Transact-SQLTransact-SQL에서 인덱스 또는 제약 조건을 비활성화하는 방법에 대해 설명합니다.This topic describes how to disable an index or constraints in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. 인덱스를 비활성화하면 사용자가 인덱스에 액세스할 수 없으며 클러스터형 인덱스의 경우 기본 테이블 데이터에도 액세스할 수 없습니다.Disabling an index prevents user access to the index, and for clustered indexes to the underlying table data. 인덱스 정의는 메타데이터에 보관되고 인덱스 통계는 비클러스터형 인덱스에 유지됩니다.The index definition remains in metadata, and index statistics are kept on nonclustered indexes. 뷰의 비클러스터형 또는 클러스터형 인덱스를 비활성화하면 인덱스 데이터가 물리적으로 삭제됩니다.Disabling a nonclustered or clustered index on a view physically deletes the index data. 테이블의 클러스터형 인덱스를 비활성화하면 테이블 데이터에 액세스할 수 없습니다. 데이터는 테이블에 계속 남아 있지만 인덱스를 삭제하거나 다시 작성할 때까지 DML(데이터 조작 언어) 작업에 데이터를 사용할 수 없습니다.Disabling a clustered index on a table prevents access to the data; the data still remains in the table, but is unavailable for data manipulation language (DML) operations until the index is dropped or rebuilt.

항목 내용In This Topic

시작하기 전 주의 사항 Before You Begin

제한 사항 Limitations and Restrictions

  • 비활성화된 인덱스는 유지 관리되지 않습니다.The index is not maintained while it is disabled.

  • 쿼리 최적화 프로그램에서 쿼리 실행 계획을 만들 때 비활성화된 인덱스는 고려하지 않습니다.The query optimizer does not consider the disabled index when creating query execution plans. 또한 테이블 힌트로 비활성화된 인덱스를 참조하는 쿼리가 실패합니다.Also, queries that reference the disabled index with a table hint fail.

  • 기존의 비활성화된 인덱스와 같은 이름을 사용하는 인덱스는 만들 수 없습니다.You cannot create an index that uses the same name as an existing disabled index.

  • 비활성화된 인덱스는 삭제할 수 없습니다.A disabled index can be dropped.

  • 고유 인덱스를 비활성화하면 다른 테이블에서 인덱싱된 열을 참조하는 모든 FOREIGN KEY 제약 조건과 PRIMARY KEY 또는 UNIQUE 제약 조건도 비활성화됩니다.When disabling a unique index, the PRIMARY KEY or UNIQUE constraint and all FOREIGN KEY constraints that reference the indexed columns from other tables are also disabled. 클러스터형 인덱스를 비활성화하는 경우 기본 테이블에 대한 들어오는 FOREIGN KEY 제약 조건과 나가는 FOREIGN KEY 제약 조건도 모두 비활성화됩니다.When disabling a clustered index, all incoming and outgoing FOREIGN KEY constraints on the underlying table are also disabled. 인덱스가 비활성화되면 경고 메시지에 제약 조건 이름이 나열됩니다.The constraint names are listed in a warning message when the index is disabled. 인덱스를 다시 작성한 후 ALTER TABLE CHECK CONSTRAINT 문을 사용하여 모든 제약 조건을 수동으로 활성화해야 합니다.After rebuilding the index, all constraints must be manually enabled by using the ALTER TABLE CHECK CONSTRAINT statement.

  • 비클러스터형 인덱스는 관련 클러스터형 인덱스를 비활성화할 경우 자동으로 비활성화됩니다.Nonclustered indexes are automatically disabled when the associated clustered index is disabled. 이렇게 비활성화된 인덱스는 테이블이나 뷰의 클러스터형 인덱스를 활성화하거나 테이블의 클러스터형 인덱스를 삭제해야 활성화할 수 있습니다.They cannot be enabled until either the clustered index on the table or view is enabled or the clustered index on the table is dropped. ALTER INDEX ALL REBUILD 문을 사용하여 클러스터형 인덱스를 활성화하지 않는 한 비클러스터형 인덱스는 명시적으로 활성화해야 합니다.Nonclustered indexes must be explicitly enabled, unless the clustered index was enabled by using the ALTER INDEX ALL REBUILD statement.

  • ALTER INDEX ALL REBUILD 문은 테이블의 비활성화된 인덱스를 모두 작성하고 비활성화합니다. 뷰의 비활성화된 인덱스는 예외입니다.The ALTER INDEX ALL REBUILD statement rebuilds and enables all disabled indexes on the table, except for disabled indexes on views. 뷰의 인덱스는 별도의 ALTER INDEX ALL REBUILD 문으로 활성화해야 합니다.Indexes on views must be enabled in a separate ALTER INDEX ALL REBUILD statement.

  • 테이블에서 클러스터형 인덱스를 비활성화하면 해당 테이블을 참조하는 뷰의 모든 클러스터형 인덱스와 비클러스터형 인덱스도 비활성화됩니다.Disabling a clustered index on a table also disables all clustered and nonclustered indexes on views that reference that table. 이러한 인덱스는 참조되는 테이블의 인덱스에 따라 다시 작성해야 합니다.These indexes must be rebuilt just as those on the referenced table.

  • 클러스터형 인덱스를 삭제하거나 다시 작성할 경우를 제외하고는 비활성화된 클러스터형 인덱스의 데이터 행에 액세스할 수 없습니다.The data rows of the disabled clustered index cannot be accessed except to drop or rebuild the clustered index.

  • 테이블에 비활성화된 클러스터형 인덱스가 없으면 비활성화된 비클러스터형 인덱스를 온라인으로 다시 작성할 수 있습니다.You can rebuild a disabled nonclustered index online when the table does not have a disabled clustered index. 그러나 ALTER INDEX REBUILD 또는 CREATE INDEX WITH DROP_EXISTING 문을 사용하는 경우에는 비활성화된 클러스터형 인덱스를 오프라인으로 다시 작성해야 합니다.However, you must always rebuild a disabled clustered index offline if you use either the ALTER INDEX REBUILD or CREATE INDEX WITH DROP_EXISTING statement. 온라인 인덱스 작업에 대한 자세한 내용은 온라인으로 인덱스 작업 수행을 참조하세요.For more information about online index operations, see Perform Index Operations Online.

  • 비활성화된 클러스터형 인덱스가 있는 테이블에서는 CREATE STATISTICS 문을 실행할 수 없습니다.The CREATE STATISTICS statement cannot be successfully executed on a table that has a disabled clustered index.

  • 인덱스가 비활성화된 상태이고 다음 조건에 해당하면 AUTO_CREATE_STATISTICS 데이터베이스 옵션이 열에 대한 새 통계를 만듭니다.The AUTO_CREATE_STATISTICS database option creates new statistics on a column when the index is disabled and the following conditions exist:

    • AUTO_CREATE_STATISTICS가 ON으로 설정된 경우AUTO_CREATE_STATISTICS is set to ON

    • 열에 대한 기존 통계가 없는 경우There are no existing statistics for the column.

    • 쿼리 최적화 동안 통계가 필요한 경우Statistics are required during query optimization.

  • 클러스터형 인덱스가 비활성화되면 DBCC CHECKDB 가 기본 테이블에 대한 정보를 반환할 수 없습니다. 대신 이 문은 클러스터형 인덱스가 비활성화되었다고 보고합니다.If a clustered index is disabled, DBCC CHECKDB cannot return information about the underlying table; instead, the statement reports that the clustered index is disabled. DBCC INDEXDEFRAG 를 사용하여 비활성화된 인덱스의 조각 모음을 수행할 수 없습니다. 이 문은 실패하고 오류 메시지가 표시됩니다.DBCC INDEXDEFRAG cannot be used to defragment a disabled index; the statement fails with an error message. DBCC DBREINDEX 를 사용하여 비활성화된 인덱스를 다시 작성할 수 있습니다.You can use DBCC DBREINDEX to rebuild a disabled index.

  • 새 클러스터형 인덱스를 만들면 이전에 비활성화된 비클러스터형 인덱스를 사용할 수 있습니다.Creating a new clustered index enables previously disabled nonclustered indexes. 자세한 내용은 Enable Indexes and Constraints을 참조하세요.For more information, see Enable Indexes and Constraints.

보안 Security

사용 권한 Permissions

ALTER INDEX를 실행하려면 최소한 테이블이나 뷰에 대한 ALTER 권한이 필요합니다.To execute ALTER INDEX, at a minimum, ALTER permission on the table or view is required.

SQL Server Management Studio 사용 Using SQL Server Management Studio

인덱스를 비활성화하려면To disable an index

  1. 개체 탐색기에서 더하기 기호를 클릭하여 인덱스를 비활성화할 테이블이 포함된 데이터베이스를 확장합니다.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to disable an index.

  2. 더하기 기호를 클릭하여 테이블 폴더를 확장합니다.Click the plus sign to expand the Tables folder.

  3. 더하기 기호를 클릭하여 인덱스를 비활성화할 테이블을 확장합니다.Click the plus sign to expand the table on which you want to disable an index.

  4. 더하기 기호를 클릭하여 인덱스 폴더를 확장합니다.Click the plus sign to expand the Indexes folder.

  5. 비활성화할 인덱스를 마우스 오른쪽 단추로 클릭하고 사용 안 함을 선택합니다.Right-click the index you want to disable and select Disable.

  6. 인덱스 비활성화 대화 상자에서 올바른 인덱스가 비활성화할 인덱스 표에 있는지 확인한 다음 확인을 클릭합니다.In the Disable Indexes dialog box, verify that the correct index is in the Indexes to disable grid and click OK.

테이블의 모든 인덱스를 비활성화하려면To disable all indexes on a table

  1. 개체 탐색기에서 더하기 기호를 클릭하여 인덱스를 비활성화할 테이블이 포함된 데이터베이스를 확장합니다.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to disable the indexes.

  2. 더하기 기호를 클릭하여 테이블 폴더를 확장합니다.Click the plus sign to expand the Tables folder.

  3. 더하기 기호를 클릭하여 인덱스를 비활성화할 테이블을 확장합니다.Click the plus sign to expand the table on which you want to disable the indexes.

  4. 인덱스 폴더를 마우스 오른쪽 단추로 클릭하고 모두 사용 안 함을 선택합니다.Right-click the Indexes folder and select Disable All.

  5. 인덱스 비활성화 대화 상자에서 올바른 인덱스가 비활성화할 인덱스 표에 있는지 확인한 다음 확인을 클릭합니다.In the Disable Indexes dialog box, verify that the correct indexes are in the Indexes to disable grid and click OK. 비활성화할 인덱스 표에서 인덱스를 제거하려면 인덱스를 선택한 다음 Delete 키를 누릅니다.To remove an index from the Indexes to disable grid, select the index and then press the Delete key.

    인덱스 비활성화 대화 상자에는 다음 정보가 표시됩니다.The following information is available in the Disable Indexes dialog box:

    Index NameIndex Name
    인덱스 이름을 표시합니다.Displays the name of the index. 실행하는 동안 이 열에는 상태를 나타내는 아이콘도 표시됩니다.During execution, this column also displays an icon representing the status.

    테이블 이름Table Name
    인덱스가 생성된 테이블 또는 뷰의 이름을 표시합니다.Displays the name of the table or view that the index was created on.

    인덱스 유형Index Type
    인덱스의 유형( 클러스터형, 비클러스터형, 공간또는 XML)을 표시합니다.Displays the type of the index: Clustered, Nonclustered, Spatial, or XML.

    상태Status
    비활성화 작업의 상태를 표시합니다.Displays the status of the disable operation. 실행 후에 표시될 수 있는 값은 다음과 같습니다.Possible values after execution are:

  • 비어 있음Blank

    실행 전에 상태 가 비어 있습니다.Prior to execution Status is blank.

  • 진행 중In progress

    인덱스 비활성화가 시작되었지만 아직 완료되지 않았습니다.Disabling of the indexes has been started but is not complete.

  • 성공Success

    비활성화 작업이 성공적으로 완료되었습니다.The disable operation completed successfully.

  • 오류Error

    인덱스 비활성화 작업을 실행하는 동안 오류가 발생하여 작업을 완료하지 못했습니다.An error was encountered during the index disable operation, and the operation did not complete successfully.

  • 중지됨Stopped

    사용자가 작업을 중지하여 인덱스 비활성화가 완료되지 않았습니다.The disable of the index was not completed successfully because the user stopped the operation.

    메시지Message
    비활성화 작업을 실행하는 동안 오류 메시지 텍스트를 제공합니다.Provides the text of error messages during the disable operation. 실행 중에는 오류 텍스트가 하이퍼링크로 표시됩니다.During execution, errors appear as hyperlinks. 하이퍼링크에는 오류 내용을 설명하는 텍스트가 표시됩니다.The text of the hyperlinks describes the body of the error. 대개의 경우 메시지 열에는 전체 메시지 텍스트의 일부만 표시됩니다.The Message column is rarely wide enough to read the full message text. 다음과 같은 두 가지 방법으로 전체 텍스트를 볼 수 있습니다.There are two ways to get the full text:

  • 마우스 포인터를 메시지 셀 위로 이동하여 오류 텍스트가 나타나는 도구 설명을 봅니다.Move the mouse pointer over the message cell to display a ToolTip with the error text.

  • 하이퍼링크를 클릭하여 전체 오류 메시지가 있는 대화 상자를 표시합니다.Click the hyperlink to display a dialog box displaying the full error.

Transact-SQL 사용 Using Transact-SQL

인덱스를 비활성화하려면To disable an index

  1. 개체 탐색기에서 데이터베이스 엔진Database Engine인스턴스에 연결합니다.In Object Explorer, connect to an instance of 데이터베이스 엔진Database Engine.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.On the Standard bar, click New Query.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    GO  
    -- disables the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table  
    ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
    DISABLE;  
    

테이블의 모든 인덱스를 비활성화하려면To disable all indexes on a table

  1. 개체 탐색기에서 데이터베이스 엔진Database Engine인스턴스에 연결합니다.In Object Explorer, connect to an instance of 데이터베이스 엔진Database Engine.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.On the Standard bar, click New Query.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    GO  
    -- Disables all indexes on the HumanResources.Employee table.  
    ALTER INDEX ALL ON HumanResources.Employee  
    DISABLE;  
    

    자세한 내용은 ALTER INDEX(Transact-SQL)를 참조하세요.For more information, see ALTER INDEX (Transact-SQL).