클러스터 및 클러스터되지 않은 인덱스

인덱스 아키텍처는 클러스터 또는 클러스터되지 않은 것으로 분류됩니다. 클러스터형 인덱스는 데이터 페이지에서 행의 순서가 인덱스에서 행의 순서에 대응하는 인덱스입니다. 이 순서는 테이블에 하나의 클러스터형 인덱스만 존재할 수 있는 반면, 많은 클러스터되지 않은 인덱스가 테이블에 존재할 수 있는 이유입니다. 일부 데이터베이스 시스템에서 클러스터형 인덱스의 리프 노드가 다른 위치에 있는 데이터에 대한 포인터가 아닌 실제 데이터에 대응합니다.

클러스터형 및 클러스터되지 않은 인덱스는 둘 다 인덱스 구조에 키 및 레코드 ID만 포함합니다. 레코드 ID는 항상 데이터 페이지의 행을 가리킵니다. 클러스터된 인덱스를 통해, 데이터베이스 관리자는 인덱스 페이지에서 해당 키와 동일한 순서대로 데이터 페이지에서 데이터를 보관하려고 합니다. 따라서 데이터베이스 관리자는 유사한 키가 있는 행을 동일한 페이지에 삽입하려고 합니다. 테이블이 재구성되면, 데이터가 인덱스 키의 순서로 데이터 페이지에 삽입됩니다. 데이터베이스 관리자는 클러스터되지 않은 인덱스의 해당 키 순서에 비교할 때 임의의 데이터 순서를 유지보수하지 않습니다.

선택된 인덱스로 테이블을 재구성하면 데이터가 다시 클러스터됩니다. 클러스터된 인덱스는 테이블에 있는 데이터의 순차적 액세스를 향상시킬 수 있기 때문에 범위 술어를 갖는 컬럼에 가장 유용합니다. 결과적으로, 동일한 데이터 페이지에 같은 값이 있게 되므로 적은 수의 페이지가 페치됩니다.

일반적으로 높은 등급의 클러스터링은 테이블에서 하나의 인덱스에만 허용됩니다.

클러스터링 인덱스는 페이지에 저장된 데이터에 대한 더욱 선형적인 액세스 경로를 제공하기 때문에 대부분의 쿼리 조작의 성능을 향상시킬 수 있습니다. 또한 유사한 인덱스 키 값가 있는 행이 함께 저장되기 때문에, 클러스터링 인덱스가 사용되는 경우 순차적 발견 프리페치가 보다 효율적입니다.

클러스터링 인덱스는 CREATE TABLE문과 함께 사용되는 테이블 정의의 파트로 지정할 수 없습니다. 대신, 클러스터링 인덱스는 CLUSTER 옵션이 지정된 CREATE INDEX문을 실행해서만 작성됩니다. 기본 키에 테이블을 클러스터링하려면, ALTER TABLE문을 사용하여 테이블에 작성된 클러스터링 인덱스에 대응하는 기본 키를 추가해야 합니다. 그러면 클러스터링 인덱스가 테이블의 기본 키 인덱스로 사용됩니다.
주: ALTER TABLE문을 사용하여 테이블의 PCTFREE를 적절한 값으로 설정하면 유사한 값을 갖는 페이지에 행을 삽입하기에 충분한 여유 공간을 남겨서 테이블이 클러스터된 상태로 유지되도록 할 수 있습니다. 자세한 정보는 ALTER TABLE문테이블 및 인덱스 재구성 필요성 줄이기를 참조하십시오.

클러스터된 인덱스를 사용한 성능 향상

일반적으로, 클러스터링 인덱스가 고유하므로 클러스터링이 더 효과적으로 유지보수됩니다.