Microsoft SQL Server에서 클러스터형 인덱스와 비클러스터형 인덱스의 차이점은 무엇입니까?
인덱스는 SQL Server가 행에서 데이터를 빠르게 검색하는 데 도움이 됩니다. 색인은 책의 시작 부분에 있는 목차와 같은 역할을 하므로 주제가 있는 페이지를 빠르게 찾을 수 있습니다. 인덱스가 없으면 SQL Server는 레코드를 찾기 위해 테이블의 모든 행을 검색해야 합니다.
SQL Server에는 클러스터형과 비클러스터형의 두 가지 유형의 인덱스가 있습니다. 클러스터형 인덱스와 비클러스터형 인덱스의 차이점과 중요한 이유를 알아보세요.
SQL Server의 클러스터형 인덱스
클러스터형 인덱스에서 데이터 행은 키 값을 기준으로 정렬된 방식으로 물리적으로 저장됩니다. 인덱스는 테이블을 포함하고 행을 한 순서로만 정렬할 수 있으므로 테이블당 하나의 클러스터형 인덱스만 만들 수 있습니다.
인덱스를 사용하면 범위의 행을 더 빠르게 검색할 수 있지만 쿼리 최적화 프로그램이 대상 인덱스를 찾을 때까지 인덱스를 순서대로 스캔하기 때문에 INSERT 및 UPDATE 문이 느려질 수 있습니다.
SQL Server의 클러스터되지 않은 인덱스
클러스터되지 않은 인덱스에는 항목이 행 로케이터라는 포인터인 키 값이 포함됩니다. 클러스터형 테이블(클러스터형 인덱스가 있는 테이블)의 경우 포인터는 클러스터형 인덱스의 키를 가리키고 키는 다시 테이블의 행을 가리킵니다. 클러스터형 인덱스가 없는 행의 경우 포인터가 테이블 행을 직접 가리킵니다.
SQL Server에서 클러스터형 인덱스를 만드는 방법
기본 키가 있는 테이블을 만들면 SQL Server는 해당 기본 키를 기반으로 클러스터형 인덱스 키를 자동으로 만듭니다. 기본 키가 없는 경우 다음 명령문을 실행하여 클러스터형 인덱스 키를 생성할 수 있습니다.
CREATE CLUSTERED INDEX <index name>
ON TABLE <table_name>(column_name)
이 문에서 인덱스 이름, 인덱스를 생성할 테이블 이름 및 인덱스에서 사용할 열 이름을 지정합니다.
이미 클러스터형 인덱스가 있는 테이블에 기본 키를 추가하면 SQL Server는 이를 사용하여 클러스터되지 않은 인덱스를 만듭니다.
기본 키 열을 포함하지 않는 클러스터형 인덱스를 만들려면 먼저 기본 키 제약 조건을 삭제해야 합니다.
USE database_name
ALTER TABLE table_name
DROP CONSTRAINT pk_name
GO
기본 키 제약 조건을 제거하면 클러스터형 인덱스도 제거되어 사용자 지정 인덱스를 만들 수 있습니다.
SQL Server에서 클러스터되지 않은 인덱스를 만드는 방법
클러스터되지 않은 인덱스를 만들려면 다음 문을 사용합니다.
CREATE INDEX <index name>
ON TABLE <table_name>(column_name)
다음과 같이 NONCLUSTERED 키워드를 사용할 수도 있습니다.
CREATE [NONCLUSTERED] INDEX <index name>
ON TABLE <table_name>(column_name)
이 문은 지정한 테이블에 클러스터되지 않은 인덱스를 만들고 지정한 열을 포함합니다.
원하는 경우 열을 오름차순(ASC) 또는 내림차순(DESC)으로 정렬할 수 있습니다.
CREATE [NONCLUSTERED] INDEX <index name>
ON TABLE <table_name>(column_name ASC/DESC)
어떤 인덱스를 선택해야 합니까?
클러스터형 및 비클러스터형 인덱스 모두 쿼리 시간을 개선합니다. 대부분의 쿼리가 테이블의 여러 열에 대한 SELECT 작업인 경우 클러스터형 인덱스가 더 빠릅니다. 그러나 INSERT 또는 UPDATE 작업의 경우 쿼리 최적화 프로그램이 인덱스에서 직접 열을 찾을 수 있으므로 비클러스터형 인덱스가 더 빠릅니다.
보시다시피 이러한 인덱스는 다양한 SQL 쿼리에 가장 적합합니다. 따라서 대부분의 SQL 데이터베이스는 정기적으로 업데이트되는 열에 대해 적어도 하나의 클러스터형 인덱스와 비클러스터형 인덱스를 갖는 것이 좋습니다.
SQL Server에서 인덱스의 중요성
클러스터형 및 비클러스터형 인덱스는 쿼리 성능을 향상시킵니다. 쿼리를 실행할 때 쿼리 최적화 프로그램은 인덱스에서 행의 저장 위치를 스캔한 다음 해당 위치에서 정보를 검색합니다. 이는 테이블의 모든 행을 스캔하는 것보다 훨씬 빠릅니다.
비클러스터형 인덱스를 사용하여 쿼리가 액세스하는 열에 대한 비클러스터형 인덱스를 만들어 책갈피 조회 교착 상태를 해결할 수도 있습니다.
답글 남기기