클러스터형 인덱스 만들기

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

SQL Server Management Studio 또는 Transact-SQL을 사용하여 테이블에 클러스터형 인덱스를 만들 수 있습니다. 몇 가지 예외를 제외하고 모든 테이블에는 클러스터형 인덱스가 있어야 합니다. 쿼리 성능을 향상시키는 것 외에도 요청 시 클러스터형 인덱스를 다시 작성하거나 다시 구성하여 테이블 조각화를 제어할 수 있습니다. 클러스터형 인덱스도 보기에서 만들 수 있습니다. (클러스터형 인덱스는 문서에 정의되어 있습니다.클러스터형 및 비클러스터형 인덱스입니다.)

일반적인 구현

클러스터형 인덱스는 다음과 같은 방법으로 구현됩니다.

  • PRIMARY KEY 및 UNIQUE 제약 조건

    제약 조건을 PRIMARY KEY 만들 때 테이블의 클러스터형 인덱스가 아직 없고 고유한 비클러스터형 인덱스를 지정하지 않으면 열 또는 열에 고유한 클러스터형 인덱스가 자동으로 만들어집니다. 기본 키 열은 값을 허용할 NULL 수 없습니다.

    제약 조건을 UNIQUE 만들면 기본적으로 제약 조건을 적용하기 위해 고유한 비클러스터형 인덱스가 UNIQUE 만들어집니다. 테이블에 클러스터형 인덱스가 아직 없는 경우 고유한 클러스터형 인덱스로 지정할 수 있습니다.

    제약 조건의 일부로 만든 인덱스는 제약 조건 이름과 동일한 이름을 자동으로 지정합니다. 자세한 내용은 기본 및 외래 키 제약 조건고유 제약 조건 및 검사 제약 조건을 참조하세요.

  • 제약 조건과 독립적인 인덱스

    비클러스터형 PRIMARY KEY 제약 조건이 지정된 경우 기본 키 열이 아닌 열의 클러스터형 인덱스를 만들 수 있습니다.

제한 사항

  • 클러스터형 인덱스 구조가 만들어지면 해당 파일 및 파일 그룹에 이전(원본) 구조와 새(대상) 구조 모두에 대한 디스크 공간이 필요합니다. 전체 트랜잭션이 커밋될 때까지 이전 구조체의 할당이 취소되지 않습니다. 정렬을 위한 추가 임시 디스크 공간도 필요할 수 있습니다. 자세한 내용은 인덱스 DDL 작업에 대한 디스크 공간 요구 사항을 참조 하세요.

  • 기존의 비클러스터형 인덱스를 여러 개 포함하는 힙에 클러스터형 인덱스를 만들 때는 RID(행 식별자) 대신 클러스터링 키 값을 포함하도록 모든 비클러스터형 인덱스를 다시 작성해야 합니다. 마찬가지로 클러스터형 인덱스가 여러 개의 비클러스터형 인덱스가 있는 테이블에 놓이면 비클러스터형 인덱스는 모두 작업의 일부로 DROP 다시 작성됩니다. 이 프로세스는 큰 테이블에서 상당한 시간이 걸릴 수 있습니다.

    큰 테이블에서 인덱스를 빌드하는 기본 방법은 클러스터형 인덱스로 시작한 다음 비클러스터형 인덱스를 빌드하는 것입니다. 기존 테이블에 인덱스를 만들 때 옵션을 ON으로 설정하는 ONLINE 것이 좋습니다. ON으로 설정하면 장기 테이블 잠금이 유지되지 않습니다. 따라서 기본 테이블에 대한 쿼리나 업데이트를 계속할 수 있습니다. 자세한 내용은 Perform Index Operations Online을 참조하세요.

  • 클러스터형 인덱스의 인덱스 키는 할당 단위에 기존 데이터가 있는 ROW_OVERFLOW_DATA varchar 열을 포함할 수 없습니다. varchar 열에 클러스터형 인덱스가 생성되고 기존 데이터가 할당 단위에 있는 IN_ROW_DATA 경우 행에서 데이터를 푸시하는 열에 대한 후속 삽입 또는 업데이트 작업이 실패합니다. 행 오버플로 데이터를 포함할 수 있는 테이블에 대한 정보를 가져오려면 sys.dm_db_index_physical_stats(Transact-SQL) 동적 관리 함수를 사용합니다.

사용 권한

테이블 또는 보기에 대한 ALTER 권한이 필요합니다. 사용자는 sysadmin 고정 서버 역할의 멤버 또는 db_ddladmindb_owner 고정 데이터베이스 역할의 멤버여야 합니다.

SQL Server Management Studio 사용

개체 탐색기 클러스터형 인덱스 만들기

  1. 개체 탐색기 클러스터형 인덱스 만들 테이블을 확장합니다.

  2. 인덱스 폴더를 마우스 오른쪽 단추로 클릭하고 새 인덱스를 가리킨 다음 클러스터형 인덱스를 선택합니다.

  3. 새 인덱스 대화 상자의 일반 페이지에서 인덱스 이름 상자에 새 인덱스의 이름을 입력합니다.

  4. 인덱스 키 열 아래에서 추가...를 선택합니다.

  5. table_name 열 선택 대화 상자에서클러스터형 인덱스에 추가할 테이블 열의 검사 상자를 선택합니다.

  6. 확인을 선택합니다.

  7. 인덱스 대화 상자에서 확인을 선택합니다.

테이블 디자이너를 사용하여 클러스터형 인덱스 만들기

  1. 개체 탐색기 클러스터형 인덱스가 있는 테이블을 만들 데이터베이스를 확장합니다.

  2. 테이블 폴더를 마우스 오른쪽 단추로 클릭하고 새 테이블을 선택합니다...

  3. 평소와 같이 새 테이블을 만듭니다. 자세한 내용은 테이블 만들기(데이터베이스 엔진)를 참조하세요.

  4. 이전에 만든 새 테이블을 마우스 오른쪽 단추로 클릭하고 디자인을 선택합니다.

  5. 테이블 디자이너 메뉴에서 인덱스/키를 선택합니다.

  6. 인덱스/키 대화 상자에서 추가를 선택합니다.

  7. 선택한 기본/고유 키 또는 인덱스 텍스트 상자에서 새 인덱스 선택

  8. 표에서 클러스터형으로 만들기를 선택하고 속성 오른쪽의 드롭다운 목록에서 예를 선택합니다.

  9. 닫기를 선택합니다.

  10. 파일 메뉴에서 table_name 저장을 선택합니다.

Transact-SQL 사용

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

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

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

    USE AdventureWorks2022;
    GO
    
    -- Create a new table with three columns.
    CREATE TABLE dbo.TestTable (
        TestCol1 INT NOT NULL,
        TestCol2 NCHAR(10) NULL,
        TestCol3 NVARCHAR(50) NULL
    );
    GO
    
    -- Create a clustered index called IX_TestTable_TestCol1
    -- on the dbo.TestTable table using the TestCol1 column.
    CREATE CLUSTERED INDEX IX_TestTable_TestCol1 ON dbo.TestTable (TestCol1);
    GO
    

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