인덱스는 테이블이나 뷰와 연결된 디스크상 구조로, 테이블이나 뷰의 행 검색 속도를 높입니다. 인덱스에는 테이블이나 뷰에 있는 하나 이상의 열로 작성되는 키가 포함됩니다. 이러한 키는 SQL Server가 키 값과 연결된 행을 빠르고 효율적으로 찾을 수 있는 구조(B-트리)에 저장됩니다.
테이블 또는 뷰에는 다음과 같은 유형의 인덱스가 포함될 수 있습니다.
클러스터형
클러스터형 인덱스는 키 값에 따라 테이블 또는 뷰에 데이터 행을 정렬하고 저장합니다. 인덱스 정의에 포함된 열입니다. 데이터 행 자체는 하나의 순서로만 정렬할 수 있으므로 테이블당 하나의 클러스터형 인덱스만 있을 수 있습니다.
테이블의 데이터 행이 정렬된 순서로 저장되는 유일한 경우는 테이블에 클러스터형 인덱스가 포함된 경우입니다. 테이블에 클러스터형 인덱스가 있는 경우 테이블을 클러스터형 테이블이라고 합니다. 테이블에 클러스터형 인덱스가 없는 경우 해당 데이터 행은 힙이라는 순서가 지정되지 않은 구조에 저장됩니다.
비클러스터형
비클러스터형 인덱스에는 데이터 행과 별개의 구조가 있습니다. 비클러스터형 인덱스에는 비클러스터형 인덱스 키 값이 포함되며 각 키 값 항목에는 키 값이 포함된 데이터 행에 대한 포인터가 있습니다.
비클러스터형 인덱스에서 데이터 행에 대한 인덱스 행의 포인터를 행 로케이터라고 합니다. 행 로케이터의 구조는 데이터 페이지가 힙 또는 클러스터형 테이블에 저장되는지 여부에 따라 달라집니다. 힙의 경우 행 로케이터는 행에 대한 포인터입니다. 클러스터형 테이블의 경우 행 로케이터는 클러스터형 인덱스 키입니다.
키가 아닌 열을 비클러스터형 인덱스의 리프 수준에 추가하여 기존 인덱스 키 제한, 900바이트 및 16개의 키 열을 바이패스하고 완전히 적용되고 인덱싱된 쿼리를 실행할 수 있습니다. 자세한 내용은 Create Indexes with Included Columns을 참조하세요.
클러스터형 인덱스와 비클러스터형 인덱스는 모두 고유할 수 있습니다. 즉, 두 행이 인덱스 키에 대해 동일한 값을 가질 수 없습니다. 그렇지 않으면 인덱스가 고유하지 않으며 여러 행이 동일한 키 값을 공유할 수 있습니다. 자세한 내용은 고유 인덱스 만들기를 참조하세요.
테이블 데이터가 수정될 때마다 테이블 또는 뷰에 대해 인덱스가 자동으로 유지됩니다.
인덱스에서 추가적인 유형의 특수 용도 인덱스를 참조하세요.
인덱스 및 제약 조건
테이블 열에 PRIMARY KEY 및 UNIQUE 제약 조건이 정의되면 인덱스가 자동으로 만들어집니다. 예를 들어 테이블을 만들고 특정 열을 기본 키로 식별하면 데이터베이스 엔진은 해당 열에 PRIMARY KEY 제약 조건 및 인덱스가 자동으로 만들어집니다. 자세한 내용은 기본 키 만들기 및 고유 제약 조건 만들기를 참조하세요.
쿼리 최적화 프로그램에서 인덱스를 사용하는 방법
잘 디자인된 인덱스는 디스크 I/O 작업을 줄이고 더 적은 시스템 리소스를 사용할 수 있으므로 쿼리 성능이 향상됩니다. 인덱스는 SELECT, UPDATE, DELETE 또는 MERGE 문을 포함하는 다양한 쿼리에 유용할 수 있습니다.
AdventureWorks2012 데이터베이스의 쿼리 SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250 를 고려합니다. 이 쿼리가 실행되면 쿼리 최적화 프로그램은 데이터를 검색하는 데 사용할 수 있는 각 메서드를 평가하고 가장 효율적인 방법을 선택합니다. 이 메서드는 테이블 검색이거나 하나 이상의 인덱스(있는 경우)를 검색할 수 있습니다.
테이블 검색을 수행할 때 쿼리 최적화 프로그램은 테이블의 모든 행을 읽고 쿼리 조건을 충족하는 행을 추출합니다. 테이블 검색은 많은 디스크 I/O 작업을 생성하며 리소스를 많이 사용할 수 있습니다. 그러나 예를 들어 쿼리의 결과 집합이 테이블에서 행의 비율이 높은 경우 테이블 검색이 가장 효율적인 방법이 될 수 있습니다.
쿼리 최적화 프로그램에서 인덱스를 사용하는 경우 인덱스 키 열을 검색하고, 쿼리에 필요한 행의 스토리지 위치를 찾고, 해당 위치에서 일치하는 행을 추출합니다. 일반적으로 인덱스 검색은 테이블 검색보다 훨씬 빠릅니다. 테이블과 달리 인덱스에는 행당 열이 거의 없으며 행은 정렬된 순서로 표시되는 경우가 많기 때문입니다.
쿼리 최적화 프로그램은 일반적으로 쿼리를 실행할 때 가장 효율적인 방법을 선택합니다. 그러나 사용할 수 있는 인덱스가 없는 경우 쿼리 최적화 프로그램은 테이블 검색을 사용해야 합니다. 쿼리 최적화 프로그램에서 선택할 효율적인 인덱스를 선택할 수 있도록 환경에 가장 적합한 인덱스를 디자인하고 만드는 것이 작업입니다. SQL Server는 데이터베이스 환경 분석 및 적절한 인덱스 선택에 도움이 되는 데이터베이스 엔진 튜닝 관리자 를 제공합니다.