클러스터형 인덱스 만들기
적용 대상: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_ddladmin 및 db_owner 고정 데이터베이스 역할의 멤버여야 합니다.
SQL Server Management Studio 사용
개체 탐색기 클러스터형 인덱스 만들기
개체 탐색기 클러스터형 인덱스 만들 테이블을 확장합니다.
인덱스 폴더를 마우스 오른쪽 단추로 클릭하고 새 인덱스를 가리킨 다음 클러스터형 인덱스를 선택합니다.
새 인덱스 대화 상자의 일반 페이지에서 인덱스 이름 상자에 새 인덱스의 이름을 입력합니다.
인덱스 키 열 아래에서 추가...를 선택합니다.
table_name 열 선택 대화 상자에서클러스터형 인덱스에 추가할 테이블 열의 검사 상자를 선택합니다.
확인을 선택합니다.
새 인덱스 대화 상자에서 확인을 선택합니다.
테이블 디자이너를 사용하여 클러스터형 인덱스 만들기
개체 탐색기 클러스터형 인덱스가 있는 테이블을 만들 데이터베이스를 확장합니다.
테이블 폴더를 마우스 오른쪽 단추로 클릭하고 새 테이블을 선택합니다...
평소와 같이 새 테이블을 만듭니다. 자세한 내용은 테이블 만들기(데이터베이스 엔진)를 참조하세요.
이전에 만든 새 테이블을 마우스 오른쪽 단추로 클릭하고 디자인을 선택합니다.
테이블 디자이너 메뉴에서 인덱스/키를 선택합니다.
인덱스/키 대화 상자에서 추가를 선택합니다.
선택한 기본/고유 키 또는 인덱스 텍스트 상자에서 새 인덱스 선택
표에서 클러스터형으로 만들기를 선택하고 속성 오른쪽의 드롭다운 목록에서 예를 선택합니다.
닫기를 선택합니다.
파일 메뉴에서 table_name 저장을 선택합니다.
Transact-SQL 사용
개체 탐색기에서 데이터베이스 엔진인스턴스에 연결합니다.
표준 도구 모음에서 새 쿼리를 선택합니다.
다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다.
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)를 참조하세요.
관련 콘텐츠
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기