설명 된 클러스터형 및 비 클러스터형 인덱스

  • 2019 년 2 월 11 일
  • 읽는 데 4 분
    • M
    • M
    • C
    • M
    • r
    • +9

적용 대상 : SQL Server (지원되는 모든 버전) Azure SQL Database

인덱스는 테이블 또는 뷰에서 행 검색 속도를 높이는 테이블 또는 뷰와 연결된 디스크상의 구조입니다. 인덱스에는 테이블 또는 뷰에있는 하나 이상의 열에서 빌드 된 키가 포함됩니다. 이러한 키는 SQL Server가 키 값과 관련된 행을 빠르고 효율적으로 찾을 수 있도록하는 구조 (B- 트리)에 저장됩니다.

테이블 또는 뷰에는 다음 유형의 인덱스가 포함될 수 있습니다.

  • 클러스터형

    • 클러스터형 인덱스는 키 값을 기준으로 테이블 또는 뷰의 데이터 행을 정렬하고 저장합니다. 인덱스 정의에 포함 된 열입니다. 데이터 행 자체는 하나의 순서로만 저장할 수 있으므로 테이블 당 하나의 클러스터형 인덱스 만있을 수 있습니다.
    • 테이블의 데이터 행이 정렬 된 순서로 저장되는 유일한 경우는 테이블에 클러스터형 인덱스가 포함 된 경우입니다. 테이블에 클러스터형 인덱스가있는 경우 테이블을 클러스터형 테이블이라고합니다. 테이블에 클러스터형 인덱스가없는 경우 데이터 행은 힙이라고하는 정렬되지 않은 구조에 저장됩니다.
  • 비 클러스터형

    • 비 클러스터형 인덱스는 데이터 행과 분리 된 구조를 갖습니다. 비 클러스터형 인덱스에는 비 클러스터형 인덱스 키 값이 포함되고 각 키 값 항목에는 키 값이 포함 된 데이터 행에 대한 포인터가 있습니다.

    • 비 클러스터형 인덱스 행의 포인터 데이터 행에 대한 인덱스를 행 로케이터라고합니다. 행 로케이터의 구조는 데이터 페이지가 힙 또는 클러스터 된 테이블에 저장되는지 여부에 따라 다릅니다. 힙의 경우 행 로케이터는 행에 대한 포인터입니다. 클러스터형 테이블의 경우 행 로케이터는 클러스터형 인덱스 키입니다.

    • 비 클러스터형 인덱스의 리프 수준에 키가 아닌 열을 추가하여 기존 인덱스 키 제한을 무시할 수 있습니다. 완전히 커버되고 인덱싱 된 쿼리를 실행합니다. 자세한 내용은 포함 된 열로 인덱스 만들기를 참조하십시오. 인덱스 키 제한에 대한 자세한 내용은 SQL Server의 최대 용량 사양을 참조하십시오.

클러스터형 및 비 클러스터형 인덱스는 모두 고유 할 수 있습니다. 이는 인덱스 키에 대해 두 행이 동일한 값을 가질 수 없음을 의미합니다. 그렇지 않으면 인덱스가 고유하지 않고 여러 행이 동일한 키 값을 공유 할 수 있습니다. 자세한 내용은 고유 인덱스 생성을 참조하십시오.

테이블 데이터가 수정 될 때마다 인덱스는 테이블 또는 뷰에 대해 자동으로 유지됩니다.

추가 유형의 특수 목적 인덱스는 인덱스를 참조하십시오.

인덱스 및 제약 조건

인덱스는 테이블 열에 PRIMARY KEY 및 UNIQUE 제약 조건이 정의 될 때 자동으로 생성됩니다. 예를 들어 UNIQUE 제약 조건이있는 테이블을 만들면 데이터베이스 엔진은 클러스터되지 않은 인덱스를 자동으로 만듭니다. PRIMARY KEY를 구성하는 경우 클러스터형 인덱스가 이미 존재하지 않는 한 데이터베이스 엔진은 클러스터형 인덱스를 자동으로 만듭니다. 기존 테이블에 PRIMARY KEY 제약 조건을 적용하려고 할 때 클러스터 된 인덱스가 이미 해당 테이블에 존재하면 SQL Server는 클러스터되지 않은 인덱스를 사용하여 기본 키를 적용합니다.

자세한 내용은 기본 키 만들기 및 고유 한 제약 조건을 만듭니다.

쿼리 최적화 프로그램에서 인덱스를 사용하는 방법

잘 설계된 인덱스는 디스크 I / O 작업을 줄이고 시스템 리소스를 더 적게 사용하므로 쿼리 성능이 향상됩니다. 인덱스는 SELECT, UPDATE, DELETE 또는 MERGE 문을 포함하는 다양한 쿼리에 유용 할 수 있습니다. AdventureWorks2012 데이터베이스의 SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250 쿼리를 고려하십시오. 이 쿼리가 실행되면 쿼리 최적화 프로그램은 데이터 검색에 사용 가능한 각 방법을 평가하고 가장 효율적인 방법을 선택합니다. 방법은 테이블 스캔이거나 하나 이상의 인덱스가있는 경우 스캔 할 수 있습니다.

테이블 스캔을 수행 할 때 쿼리 최적화 프로그램은 테이블의 모든 행을 읽고 충족되는 행을 추출합니다. 질의의 기준. 테이블 스캔은 많은 디스크 I / O 작업을 생성하며 리소스 집약적 일 수 있습니다. 그러나 예를 들어 쿼리 결과 집합이 테이블 행의 비율이 높은 경우 테이블 스캔이 가장 효율적인 방법이 될 수 있습니다.

쿼리 최적화 프로그램이 인덱스를 사용하면 인덱스를 검색합니다. 인덱스 키 열은 쿼리에 필요한 행의 저장 위치를 찾고 해당 위치에서 일치하는 행을 추출합니다. 일반적으로 인덱스 검색은 테이블 검색보다 훨씬 빠릅니다. 테이블과 달리 인덱스에는 행당 열이 거의 포함되지 않고 행이 정렬 된 순서이기 때문입니다.

쿼리 최적화 프로그램은 일반적으로 쿼리를 실행할 때 가장 효율적인 방법을 선택합니다. 그러나 사용 가능한 인덱스가없는 경우 쿼리 최적화 프로그램은 테이블 스캔을 사용해야합니다. 사용자의 작업은 쿼리 최적화 프로그램이 선택할 수있는 효율적인 인덱스를 선택할 수 있도록 사용자 환경에 가장 적합한 인덱스를 디자인하고 만드는 것입니다. SQL Server는 데이터베이스 환경 분석과 적절한 인덱스 선택에 도움이되는 데이터베이스 엔진 튜닝 관리자를 제공합니다.

중요

인덱스 디자인 지침에 대한 자세한 내용은 및 내부에 대해서는 SQL Server 인덱스 디자인 가이드를 참조하십시오.

  • SQL Server 인덱스 디자인 가이드
  • 클러스터형 인덱스 만들기
  • 비 클러스터형 만들기 색인

Leave a Reply

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다