다음을 통해 공유


클러스터형 인덱스 만들기

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

항목 내용

시작하기 전에

일반적인 구현 방법

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

  • PRIMARY KEY 및 UNIQUE 제약 조건

    PRIMARY KEY 제약 조건을 만들 때 테이블에 클러스터형 인덱스가 없으며 고유 비클러스터형 인덱스를 지정하지 않은 경우 열에 고유 클러스터형 인덱스가 자동으로 생성됩니다. 기본 키 열에는 NULL 값이 허용되지 않습니다.

    UNIQUE 제약 조건을 만들면 고유 비클러스터형 인덱스가 생성되어 기본적으로 UNIQUE 제약 조건을 적용합니다. 테이블에 클러스터형 인덱스가 없는 경우 고유 클러스터형 인덱스를 지정할 수 있습니다.

    제약 조건의 일부로 생성된 인덱스에는 제약 조건 이름과 같은 이름이 자동으로 지정됩니다. 자세한 내용은 Primary and Foreign Key ConstraintsUnique Constraints and Check Constraints를 참조하세요.

  • 제약 조건의 영향을 받지 않는 인덱스

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

제한 사항

  • 클러스터형 인덱스 구조를 만들 때는 각 파일과 파일 그룹에서 기존(원본) 구조와 새(대상) 구조를 위한 디스크 공간이 모두 필요합니다. 기존 구조는 인덱스 생성 트랜잭션이 커밋된 후 할당 취소됩니다. 정렬에 사용할 임시 디스크 공간이 추가로 필요할 수도 있습니다. 자세한 내용은 Disk Space Requirements for Index DDL Operations을 참조하세요.

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

    대형 테이블에 인덱스를 만들 경우 클러스터형 인덱스로 시작하고 비클러스터형 인덱스를 작성하는 것이 좋습니다. 기존 테이블에 인덱스를 만들 때는 ONLINE 옵션을 ON으로 설정하는 것이 좋습니다. 이 옵션을 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. 표에서 CLUSTERED로 만들기를 선택하고 속성 오른쪽에 있는 드롭다운 목록에서 를 선택합니다.

  9. 닫기를 클릭합니다.

  10. 파일 메뉴에서 table name저장을 클릭합니다.

Transact-SQL 사용

클러스터형 인덱스를 만들려면

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

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

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

    USE AdventureWorks2012;  
    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)를 참조하세요.

참고 항목

기본 키 만들기
UNIQUE 제약 조건 만들기