다음을 통해 공유


인덱스 기본 사항

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

테이블이나 뷰에 포함할 수 있는 인덱스 유형은 다음과 같습니다.

  • 클러스터형

    • 클러스터형 인덱스는 해당 키 값을 기반으로 테이블이나 뷰의 데이터 행을 정렬하고 저장합니다. 인덱스 정의에 여러 열이 포함됩니다. 데이터 행 자체는 한 가지 순서로만 정렬될 수 있으므로 테이블당 클러스터형 인덱스는 하나만 있을 수 있습니다.

    • 테이블의 데이터 행이 정렬된 순서로 저장될 때만 테이블에 클러스터형 인덱스가 포함됩니다. 클러스터형 인덱스가 포함된 테이블을 클러스터형 테이블이라고 합니다. 테이블에 클러스터형 인덱스가 없으면 해당 데이터 행은 힙이라는 정렬되지 않은 _구조로 저장됩니다.

  • 비클러스터형 인덱스

    • 비클러스터형 인덱스의 구조는 데이터 행으로부터 독립적입니다. 비클러스터형 인덱스에는 비클러스터형 인덱스 키 값이 있으며 각 키 값 항목에는 해당 키 값이 포함된 데이터 행에 대한 포인터가 있습니다.

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

    • 클러스터형 인덱스의 리프 수준에 키가 아닌 열을 추가하여 기존 키 제한(900바이트 및 16개 키 열)을 무시하고 완전히 포괄되는 인덱싱된 쿼리를 실행할 수 있습니다. 자세한 내용은 포괄 열이 있는 인덱스를 참조하십시오.

인덱스 구조에 대한 자세한 내용은 테이블 및 인덱스 데이터 구조 아키텍처를 참조하십시오.

클러스터형 인덱스와 비클러스터형 인덱스 모두 고유 인덱스가 될 수 있습니다. 이 경우 두 행에 인덱스 키에 대한 동일한 값이 있을 수 없습니다. 동일한 값이 있다면 인덱스는 고유하지 않으며 여러 행에서 동일한 키 값을 공유할 수 있습니다. 자세한 내용은 고유 인덱스 디자인 지침을 참조하십시오.

테이블 데이터가 수정될 때마다 테이블이나 뷰에 대한 인덱스가 자동으로 유지 관리됩니다.

인덱스 및 제약 조건

테이블 열에 PRIMARY KEY 및 UNIQUE 제약 조건을 정의하면 인덱스가 자동으로 생성됩니다. 예를 들어 테이블을 만들고 특정 열을 기본 키로 지정하면 데이터베이스 엔진에서 자동으로 해당 열에 대한 인덱스와 PRIMARY KEY 제약 조건이 생성됩니다. 자세한 내용은 인덱스 만들기(데이터베이스 엔진)를 참조하십시오.

쿼리 최적화 프로그램의 인덱스 사용 방법

인덱스를 잘 디자인하면 디스크 I/O 작업과 시스템 리소스 사용을 줄일 수 있으므로 쿼리 성능이 향상됩니다. 인덱스는 SELECT, UPDATE, DELETE 또는 MERGE 문을 포함하는 다양한 쿼리에 유용합니다. AdventureWorks 데이터베이스의 SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250을 예로 들어 보겠습니다. 이 쿼리가 실행될 때 쿼리 최적화 프로그램은 데이터 검색에 사용할 수 있는 각 방법을 평가하고 가장 효율적인 방법을 선택합니다. 이때 테이블 검색이 선택될 수 있습니다. 가능한 경우 하나 이상의 인덱스 검색이 선택될 수도 있습니다.

테이블 검색을 수행할 때 쿼리 최적화 프로그램은 테이블의 모든 행을 읽고 쿼리 조건에 맞는 행을 추출합니다. 테이블 검색은 많은 디스크 I/O 작업을 생성하고 리소스를 많이 사용할 수 있습니다. 그러나 예를 들어 쿼리 결과 집합의 행이 테이블에서 높은 비율을 차지할 경우 테이블 검색이 가장 효율적인 방법일 수 있습니다.

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

쿼리 최적화 프로그램은 일반적으로 쿼리 실행 시 가장 효율적인 방법을 선택합니다. 그러나 사용 가능한 인덱스가 없을 경우 쿼리 최적화 프로그램은 테이블 검색을 사용해야 합니다. 쿼리 최적화 프로그램에서 선택할 수 있는 효율적인 인덱스가 충분하도록 하려면 환경에 가장 적합한 인덱스를 여러 개 디자인하고 만들어야 합니다. SQL Server에서 제공하는 데이터베이스 엔진 튜닝 관리자를 사용하면 데이터베이스 환경을 분석하고 적절한 인덱스를 선택하는 데 도움이 됩니다.

참고 항목

개념

관련 자료