인덱스 다시 구성 및 다시 작성Reorganize and Rebuild Indexes

이 항목 적용 대상: 예SQL Server예Azure SQL 데이터베이스예Azure SQL 데이터 웨어하우스 예 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

이전 버전의 SQL Server와 관련 된 콘텐츠를 참조 하십시오. 인덱스 다시 구성 및 다시 작성합니다.For content related to previous versions of SQL Server, see Reorganize and Rebuild Indexes.

이 항목에서는 SQL ServerSQL Server 에서 SQL Server Management StudioSQL Server Management Studio 또는 Transact-SQLTransact-SQL을 사용하여 조각난 인덱스를 다시 구성하거나 다시 작성하는 방법에 대해 설명합니다.This topic describes how to reorganize or rebuild a fragmented index in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. SQL Server 데이터베이스 엔진SQL Server Database Engine에서는 기본 데이터에 삽입, 업데이트 또는 삭제 작업을 수행할 때마다 인덱스를 자동으로 수정합니다.The SQL Server 데이터베이스 엔진SQL Server Database Engine automatically modifies indexes whenever insert, update, or delete operations are made to the underlying data. 이러한 수정이 거듭되면 시간이 흐름에 따라 인덱스의 정보가 조각화되어 데이터베이스 내에 흩어지게 될 수 있습니다.Over time these modifications can cause the information in the index to become scattered in the database (fragmented). 조각화는 키 값을 기준으로 하는 인덱스의 논리적 페이지 순서가 데이터 파일 내의 물리적 순서와 일치하지 않을 때 나타납니다.Fragmentation exists when indexes have pages in which the logical ordering, based on the key value, does not match the physical ordering inside the data file. 심하게 조각화된 인덱스는 쿼리 성능을 저하시키고 응용 프로그램이 응답을 늦출 수 있습니다(특히 검사 작업).Heavily fragmented indexes can degrade query performance and cause your application to respond slowly, especially scan operations.

인덱스를 다시 구성하거나 다시 작성하여 인덱스 조각화 문제를 해결할 수 있습니다.You can remedy index fragmentation by reorganizing or rebuilding an index. 파티션 구성표에 작성한 분할된 인덱스의 경우 전체 인덱스나 인덱스의 단일 파티션에 이러한 방법 중 하나를 사용할 수 있습니다.For partitioned indexes built on a partition scheme, you can use either of these methods on a complete index or a single partition of an index. 인덱스를 다시 작성하면 이 인덱스가 삭제된 다음 다시 생성됩니다.Rebuilding an index drops and re-creates the index. 이렇게 하면 조각화를 제거하고, 지정된 채우기 비율 또는 기존 채우기 비율 설정을 기준으로 페이지를 압축하여 디스크 공간을 회수하고, 인덱스 행을 연속된 페이지로 다시 정렬할 수 있습니다.This removes fragmentation, reclaims disk space by compacting the pages based on the specified or existing fill factor setting, and reorders the index rows in contiguous pages. ALL을 지정하면 테이블의 모든 인덱스가 단일 트랜잭션으로 삭제되고 다시 작성됩니다.When ALL is specified, all indexes on the table are dropped and rebuilt in a single transaction. 인덱스를 다시 구성할 때는 최소한의 시스템 리소스가 사용됩니다.Reorganizing an index uses minimal system resources. 이때는 왼쪽에서 오른쪽으로 표시되는 리프 노드의 논리적 순서에 맞도록 리프 수준 페이지를 물리적으로 다시 정렬하여 테이블 및 뷰의 클러스터형 및 비클러스터형 인덱스의 리프 수준에 대한 조각 모음을 수행합니다.It defragments the leaf level of clustered and nonclustered indexes on tables and views by physically reordering the leaf-level pages to match the logical, left to right, order of the leaf nodes. 다시 구성 작업을 수행하면 인덱스 페이지도 압축됩니다.Reorganizing also compacts the index pages. 이때 압축은 기존 채우기 비율 값을 기준으로 수행됩니다.Compaction is based on the existing fill factor value.

시작하기 전에Before You Begin

조각화 검색Detecting Fragmentation

사용할 조각 모음 방법을 결정하기 위한 첫 번째 단계는 인덱스를 분석하여 조각화 수준을 확인하는 것입니다.The first step in deciding which defragmentation method to use is to analyze the index to determine the degree of fragmentation. sys.dm_db_index_physical_stats시스템 함수를 사용하여 특정 인덱스, 테이블이나 인덱싱된 뷰의 모든 인덱스, 데이터베이스의 모든 인덱스 또는 모든 데이터베이스 내 모든 인덱스에서 조각화를 검색할 수 있습니다.By using the system function sys.dm_db_index_physical_stats, you can detect fragmentation in a specific index, all indexes on a table or indexed view, all indexes in a database, or all indexes in all databases. 분할된 인덱스의 경우 sys.dm_db_index_physical_stats 에서도 각 파티션의 조각화 정보를 제공합니다.For partitioned indexes, sys.dm_db_index_physical_stats also provides fragmentation information for each partition.

sys.dm_db_index_physical_stats 함수에서 반환한 결과 집합은 다음 열을 포함합니다.The result set returned by the sys.dm_db_index_physical_stats function includes the following columns.

Column 설명Description
avg_fragmentation_in_percentavg_fragmentation_in_percent 논리적 조각화(인덱스에서 순서가 잘못된 페이지) 비율The percent of logical fragmentation (out-of-order pages in the index).
fragment_countfragment_count 인덱스의 조각(물리적으로 연속되는 리프 페이지) 수The number of fragments (physically consecutive leaf pages) in the index.
avg_fragment_size_in_pagesavg_fragment_size_in_pages 인덱스 한 조각의 평균 페이지 수Average number of pages in one fragment in an index.

조각화 수준을 파악하고 나면 다음 테이블을 사용하여 가장 적합한 조각화 수정 방법을 결정합니다.After the degree of fragmentation is known, use the following table to determine the best method to correct the fragmentation.

avg_fragmentation_in_percentavg_fragmentation_in_percent value 수정문Corrective statement
> 5% 및 < = 30%> 5% and < = 30% ALTER INDEX REORGANIZEALTER INDEX REORGANIZE
> 30%> 30% ALTER INDEX REBUILD WITH (ONLINE = ON) 1ALTER INDEX REBUILD WITH (ONLINE = ON) 1

1 온라인 또는 오프라인으로 인덱스를 다시 작성할 수 있습니다.1 Rebuilding an index can be executed online or offline. 인덱스를 다시 구성하는 과정은 항상 온라인으로 실행됩니다.Reorganizing an index is always executed online. 다시 구성할 때와 비슷한 가용성을 얻으려면 온라인으로 인덱스를 다시 작성해야 합니다.To achieve availability similar to the reorganize option, you should rebuild indexes online.

이러한 값은 ALTER INDEX REORGANIZEALTER INDEX REBUILD를 전환해야 하는 시점을 확인하기 위한 대략적인 지침을 제공합니다.These values provide a rough guideline for determining the point at which you should switch between ALTER INDEX REORGANIZE and ALTER INDEX REBUILD. 그러나 실제 값은 경우에 따라 달라질 수 있습니다.However, the actual values may vary from case to case. 실험을 통해 환경에 맞는 임계값을 확인하는 것이 중요합니다.It is important that you experiment to determine the best threshold for your environment. 대체로 작은 양의 조각화를 제거할 경우 얻게 되는 이점보다 인덱스를 다시 구성하거나 다시 작성하는 비용이 훨씬 크기 때문에 두 명령 중 하나를 사용하여 매우 낮은 수준의 조각화(5% 미만)를 처리하는 것은 바람직하지 않습니다.Very low levels of fragmentation (less than 5 percent) should not be addressed by either of these commands because the benefit from removing such a small amount of fragmentation is almost always vastly outweighed by the cost of reorganizing or rebuilding the index. ALTER INDEX REORGANIZEALTER INDEX REBUILD에 대한 자세한 내용은 ALTER INDEX (Transact-SQL)를 참조하세요.For more information about ALTER INDEX REORGANIZE and ALTER INDEX REBUILD, refer to ALTER INDEX (Transact-SQL).

참고

일반적으로 작은 인덱스의 조각화는 제어할 수 없는 경우가 많습니다.In general, fragmentation on small indexes is often not controllable. 작은 인덱스의 페이지는 종종 혼합 익스텐트에 저장됩니다.The pages of small indexes are sometimes stored on mixed extents. 혼합 익스텐트는 최대 8개의 개체가 공유할 수 있으므로 인덱스를 다시 작성하거나 다시 구성한 후에도 작은 인덱스의 조각화가 줄어들지 않을 수 있습니다.Mixed extents are shared by up to eight objects, so the fragmentation in a small index might not be reduced after reorganizing or rebuilding the index.

제한 사항Limitations and Restrictions

  • 128 익스텐트 이상의 인덱스는 논리적 단계와 물리적 단계로 나누어 다시 작성합니다.Indexes with more than 128 extents are rebuilt in two separate phases: logical and physical. 논리적 단계에서는 인덱스에 의해 사용되는 기존 할당 단위가 할당 취소 상태로 표시되며 데이터 행이 복사되어 정렬된 후 다시 작성된 인덱스를 저장하기 위해 생성된 새 할당 단위로 옮겨집니다.In the logical phase, the existing allocation units used by the index are marked for deallocation, the data rows are copied and sorted, then moved to new allocation units created to store the rebuilt index. 물리적 단계에서는 이전에 할당 취소 상태로 표시된 할당 단위가 백그라운드로 실행되는 짧은 트랜잭션을 통해 물리적으로 삭제됩니다. 이 단계는 잠금을 많이 필요로 하지 않습니다.In the physical phase, the allocation units previously marked for deallocation are physically dropped in short transactions that happen in the background, and do not require many locks. 익스텐트에 대한 자세한 내용은 페이지 및 익스텐트 아키텍처 가이드를 참조하세요.For more information about extents, refer to the Pages and Extents Architecture Guide.

  • 인덱스를 다시 구성할 때는 인덱스 옵션을 지정할 수 없습니다.Index options cannot be specified when reorganizing an index.

  • ALTER INDEX REORGANIZE 문을 사용하면 작업에서 파일 그룹 내의 다른 파일이 아닌 동일한 파일에만 임시 작업 페이지를 할당할 수 있으므로 인덱스가 포함된 데이터 파일에 사용 가능한 공간이 있어야 합니다.The ALTER INDEX REORGANIZE statement requires the data file containing the index to have space available, because the operation can only allocate temporary work pages on the same file, not another file within the filegroup. 따라서 파일 그룹에 사용 가능한 페이지가 있을 수 있지만 사용자는 여전히 오류 1105: Could not allocate space for object '###' in database '###' because the '###' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.이 발생할 수 있습니다.So although the filegroup might have free pages available, the user can still encounter error 1105: Could not allocate space for object '###' in database '###' because the '###' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.

  • 파티션 수가 1,000개를 초과하는 테이블에서 정렬되지 않은 인덱스를 만들거나 다시 작성할 수 있지만 해당 인덱스는 권장되지 않습니다.Creating and rebuilding nonaligned indexes on a table with more than 1,000 partitions is possible, but is not recommended. 그러면 작업 중에 성능이 저하되거나 메모리가 과도하게 소비될 수 있습니다.Doing so may cause degraded performance or excessive memory consumption during these operations.

중요

SQL Server 2012SQL Server 2012부터 분할된 인덱스를 만들거나 다시 작성할 때 테이블의 모든 행을 검사하여 통계를 작성하지 않습니다.Starting with SQL Server 2012SQL Server 2012, statistics are not created by scanning all the rows in the table when a partitioned index is created or rebuilt. 대신 쿼리 최적화 프로그램에서 기본 샘플링 알고리즘을 사용하여 통계를 생성합니다.Instead, the query optimizer uses the default sampling algorithm to generate statistics. 테이블의 모든 행을 검사하여 분할된 인덱스에 대한 통계를 얻으려면 FULLSCAN 절에서 CREATE STATISTICS 또는 UPDATE STATISTICS를 사용합니다.To obtain statistics on partitioned indexes by scanning all the rows in the table, use CREATE STATISTICS or UPDATE STATISTICS with the FULLSCAN clause.

보안Security

사용 권한Permissions

테이블이나 뷰에 대한 ALTER 권한이 필요합니다.Requires ALTER permission on the table or view. 사용자는 sysadmin 고정 서버 역할의 멤버 또는 db_ddladmindb_owner 고정 데이터베이스 역할의 멤버여야 합니다.User must be a member of the sysadmin fixed server role or the db_ddladmin and db_owner fixed database roles.

SQL Server Management StudioSQL Server Management Studio를 사용하여 인덱스 조각화 확인Check index fragmentation using SQL Server Management StudioSQL Server Management Studio

인덱스의 조각화를 확인하려면To check the fragmentation of an index

  1. 개체 탐색기에서 인덱스의 조각화를 확인할 테이블이 포함된 데이터베이스를 확장합니다.In Object Explorer, Expand the database that contains the table on which you want to check an index’s fragmentation.

  2. 테이블 폴더를 확장합니다.Expand the Tables folder.

  3. 인덱스의 조각화를 확인할 테이블을 확장합니다.Expand the table on which you want to check an index’s fragmentation.

  4. 인덱스 폴더를 확장합니다.Expand the Indexes folder.

  5. 조각화를 확인할 인덱스를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.Right-click the index of which you want to check the fragmentation and select Properties.

  6. 페이지 선택아래에서 조각화를 선택합니다.Under Select a page, select Fragmentation.

    조각화 페이지에서 다음 정보를 사용할 수 있습니다.The following information is available on the Fragmentation page:

    페이지 사용률Page fullness
    인덱스 페이지의 평균 사용률(%)을 나타냅니다.Indicates average fullness of the index pages, as a percentage. 즉, 인덱스 페이지가 모두 사용되고 있는 경우 100%로 표시되며,100% means the index pages are completely full. 50%인 경우 평균적으로 각 인덱스 페이지가 절반 정도 사용되고 있는 것입니다.50% means that, on average, each index page is half full.

    총 조각화Total fragmentation
    논리적 조각화 비율입니다.The logical fragmentation percentage. 이 값은 인덱스에서 순서대로 저장되어 있지 않은 페이지의 수를 나타냅니다.This indicates the number of pages in an index that are not stored in order.

    평균 행 크기Average row size
    리프 수준 행의 평균 크기입니다.The average size of a leaf level row.

    깊이Depth
    리프 수준을 포함한 인덱스의 수준 수입니다.The number of levels in the index, including the leaf level.

    전달된 레코드Forwarded records
    다른 데이터 위치로의 전달 포인터가 있는 힙의 레코드 수입니다.The number of records in a heap that have forward pointers to another data location. 이 상태는 업데이트하는 동안 원본 위치에 새 행을 저장할 공간이 충분하지 않은 경우에 발생합니다.(This state occurs during an update, when there is not enough room to store the new row in the original location.)

    삭제할 행Ghost rows
    삭제하도록 표시되어 있지만 아직 제거되지 않은 행의 수입니다.The number of rows that are marked as deleted but not yet removed. 이러한 행은 서버 사용량이 적을 때 정리 스레드에 의해 제거됩니다.These rows will be removed by a clean-up thread, when the server is not busy. 처리 중인 스냅숏 격리 트랜잭션으로 인해 보유된 행은 이 값에 포함되지 않습니다.This value does not include rows that are being retained due to an outstanding snapshot isolation transaction.

    인덱스 유형Index type
    인덱스의 유형입니다.The type of index. 가능한 값은 클러스터형 인덱스, 비클러스터형 인덱스기본 XML입니다.Possible values are Clustered index, Nonclustered index, and Primary XML. 테이블을 인덱스가 없는 힙으로 저장할 수도 있지만, 그러한 경우 이 인덱스 속성 페이지를 열 수 없습니다.Tables can also be stored as a heap (without indexes), but then this Index Properties page cannot be opened.

    리프 수준 행Leaf-level rows
    리프 수준 행의 수입니다.The number of leaf level rows.

    최대 행 크기Maximum row size
    리프 수준 행의 최대 크기입니다.The maximum leaf-level row size.

    최소 행 크기Minimum row size
    리프 수준 행의 최소 크기입니다.The minimum leaf-level row size.

    페이지Pages
    총 데이터 페이지 수입니다.The total number of data pages.

    Partition IDPartition ID
    인덱스를 포함하는 B-트리의 파티션 ID입니다.The partition ID of the b-tree containing the index.

    버전 삭제할 행Version ghost rows
    처리 중인 스냅숏 격리 트랜잭션으로 인해 보유하고 있는 삭제할 레코드 수입니다.The number of ghost records that are being retained due to an outstanding snapshot isolation transaction.

Transact-SQLTransact-SQL를 사용하여 인덱스 조각화 확인Check index fragmentation using Transact-SQLTransact-SQL

인덱스의 조각화를 확인하려면To check the fragmentation of 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  
    -- Find the average fragmentation percentage of all indexes  
    -- in the HumanResources.Employee table.   
    SELECT a.index_id, name, avg_fragmentation_in_percent  
    FROM sys.dm_db_index_physical_stats (DB_ID(N'AdventureWorks2012'), 
          OBJECT_ID(N'HumanResources.Employee'), NULL, NULL, NULL) AS a  
        JOIN sys.indexes AS b 
          ON a.object_id = b.object_id AND a.index_id = b.index_id;   
    GO  
    

    위의 문은 다음과 비슷한 결과 집합을 반환할 수 있습니다.The statement above might return a result set similar to the following.

    index_id    name                                                  avg_fragmentation_in_percent  
    ----------- ----------------------------------------------------- ----------------------------  
    1           PK_Employee_BusinessEntityID                          0  
    2           IX_Employee_OrganizationalNode                        0  
    3           IX_Employee_OrganizationalLevel_OrganizationalNode    0  
    5           AK_Employee_LoginID                                   66.6666666666667  
    6           AK_Employee_NationalIDNumber                          50  
    7           AK_Employee_rowguid                                   0  
    
    (6 row(s) affected)  
    

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

SQL Server Management StudioSQL Server Management Studio를 사용하여 조각화 제거Remove fragmentation using SQL Server Management StudioSQL Server Management Studio

인덱스를 다시 구성하거나 다시 작성하려면To reorganize or rebuild an index

  1. 개체 탐색기에서 인덱스를 다시 구성할 테이블이 포함된 데이터베이스를 확장합니다.In Object Explorer, Expand the database that contains the table on which you want to reorganize an index.

  2. 테이블 폴더를 확장합니다.Expand the Tables folder.

  3. 인덱스를 다시 구성할 테이블을 확장합니다.Expand the table on which you want to reorganize an index.

  4. 인덱스 폴더를 확장합니다.Expand the Indexes folder.

  5. 다시 구성할 인덱스를 마우스 오른쪽 단추로 클릭하고 다시 구성을 선택합니다.Right-click the index you want to reorganize and select Reorganize.

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

  7. 큰 개체 열 데이터 압축 확인란을 선택하여 LOB(Large Object) 데이터가 포함된 모든 페이지도 압축되도록 지정합니다.Select the Compact large object column data check box to specify that all pages that contain large object (LOB) data are also compacted.

  8. 확인.Click OK.

테이블의 모든 인덱스를 다시 구성하려면To reorganize all indexes in a table

  1. 개체 탐색기에서 인덱스를 다시 구성할 테이블이 포함된 데이터베이스를 확장합니다.In Object Explorer, Expand the database that contains the table on which you want to reorganize the indexes.

  2. 테이블 폴더를 확장합니다.Expand the Tables folder.

  3. 인덱스를 다시 구성할 테이블을 확장합니다.Expand the table on which you want to reorganize the indexes.

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

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

  6. 큰 개체 열 데이터 압축 확인란을 선택하여 LOB(Large Object) 데이터가 포함된 모든 페이지도 압축되도록 지정합니다.Select the Compact large object column data check box to specify that all pages that contain large object (LOB) data are also compacted.

  7. 확인.Click OK.

인덱스를 다시 작성하려면To rebuild an index

  1. 개체 탐색기에서 인덱스를 다시 구성할 테이블이 포함된 데이터베이스를 확장합니다.In Object Explorer, Expand the database that contains the table on which you want to reorganize an index.

  2. 테이블 폴더를 확장합니다.Expand the Tables folder.

  3. 인덱스를 다시 구성할 테이블을 확장합니다.Expand the table on which you want to reorganize an index.

  4. 인덱스 폴더를 확장합니다.Expand the Indexes folder.

  5. 다시 구성할 인덱스를 마우스 오른쪽 단추로 클릭하고 다시 작성을 선택합니다.Right-click the index you want to reorganize and select Rebuild.

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

  7. 큰 개체 열 데이터 압축 확인란을 선택하여 LOB(Large Object) 데이터가 포함된 모든 페이지도 압축되도록 지정합니다.Select the Compact large object column data check box to specify that all pages that contain large object (LOB) data are also compacted.

  8. 확인.Click OK.

Transact-SQLTransact-SQL를 사용하여 조각화 제거Remove fragmentation using Transact-SQLTransact-SQL

조각난 인덱스를 다시 구성하려면To reorganize a fragmented 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  
    -- Reorganize the IX_Employee_OrganizationalLevel_OrganizationalNode 
    -- index on the HumanResources.Employee table.   
    
    ALTER INDEX IX_Employee_OrganizationalLevel_OrganizationalNode 
      ON HumanResources.Employee  
    REORGANIZE ;   
    GO  
    

테이블의 모든 인덱스를 다시 구성하려면To reorganize all indexes in 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  
    -- Reorganize all indexes on the HumanResources.Employee table.  
    ALTER INDEX ALL ON HumanResources.Employee  
    REORGANIZE ;   
    GO  
    

조각난 인덱스를 다시 작성하려면To rebuild a fragmented 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. 이 예에서는 Employee 테이블의 단일 인덱스를 다시 작성합니다.The example rebuilds a single index on the Employee table.

    USE AdventureWorks2012;
    GO
    ALTER INDEX PK_Employee_BusinessEntityID ON HumanResources.Employee
    REBUILD;
    GO
    

테이블에서 모든 인덱스를 다시 작성하려면To rebuild all indexes in a table

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

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

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣습니다. 이 예에서는 키워드 ALL을 지정합니다.Copy and paste the following example into the query The example specifies the keyword ALL. 이 키워드는 테이블에 연결된 인덱스를 모두 다시 작성합니다.This rebuilds all indexes associated with the table. 3개의 옵션이 지정됩니다.Three options are specified.

    USE AdventureWorks2012;
    GO
    ALTER INDEX ALL ON Production.Product
    REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,
                  STATISTICS_NORECOMPUTE = ON);
    GO
    

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

자동 인덱스 및 통계 관리Automatic index and statistics management

Adaptive Index Defrag와 같은 솔루션을 사용하여 하나 이상의 데이터베이스에 대한 인덱스 조각 모음 및 통계 업데이트를 자동으로 관리합니다.Leverage solutions such as Adaptive Index Defrag to automatically manage index defragmentation and statistics updates for one or more databases. 이 절차는 다른 매개 변수 사이에서 조각화 수준에 따라 인덱스를 다시 작성하거나 다시 구성할지 여부를 자동으로 선택하고 통계를 선형 임계값으로 업데이트합니다.This procedure automatically chooses whether to rebuild or reorganize an index according to its fragmentation level, amongst other parameters, and update statistics with a linear threshold.

관련 항목:See Also

SQL Server 인덱스 디자인 가이드 SQL Server Index Design Guide
ALTER INDEX(Transact-SQL) ALTER INDEX (Transact-SQL)
Adaptive Index Defrag Adaptive Index Defrag
CREATE STATISTICS(Transact-SQL) CREATE STATISTICS (Transact-SQL)
UPDATE STATISTICS(Transact-SQL)UPDATE STATISTICS (Transact-SQL)