다음을 통해 공유


누락된 인덱스 기능 정보

누락된 인덱스 기능은 동적 관리 개체와 실행 계획을 사용하여 SQL Server 쿼리 성능을 높일 수 있는 누락된 인덱스에 대한 정보를 제공합니다.

구성 요소

쿼리 최적화 프로그램은 쿼리 계획을 생성할 때 어떤 인덱스가 특정 필터 조건에 가장 적합한지 분석합니다. 최상의 인덱스가 없을 경우 쿼리 최적화 프로그램에서 만족스럽지 못한 쿼리 계획을 생성하지만 최상의 인덱스에 대한 정보를 저장합니다. 누락된 인덱스 기능을 통해 이러한 인덱스 정보에 액세스하고 구현 여부를 결정할 수 있습니다.

누락된 인덱스 기능은 다음 구성 요소로 이루어져 있습니다.

  • 누락된 인덱스에 대한 정보를 반환하기 위해 쿼리할 수 있는 동적 관리 개체 집합

  • 쿼리 최적화 프로그램에서 누락된 것으로 간주되는 인덱스와 해당 쿼리의 상관 관계를 지정하는 XML 실행 계획의 MissingIndexes 요소

누락된 인덱스 기능의 구성 요소에 대해서는 다음 섹션에서 자세히 설명합니다.

동적 관리 개체

SQL Server에서 일반 작업을 실행한 후 다음 표에 나열된 동적 관리 개체를 쿼리하여 누락된 인덱스에 대한 정보를 검색할 수 있습니다. 이러한 동적 관리 개체는 master 데이터베이스에 저장됩니다.

동적 관리 개체

반환되는 정보

sys.dm_db_missing_index_group_stats(Transact-SQL)

누락된 인덱스 그룹에 대한 요약 정보를 반환합니다. 예를 들어 특정 그룹의 누락된 인덱스를 구현할 경우 얻을 수 있는 성능 향상 등의 정보가 포함됩니다.

sys.dm_db_missing_index_groups(Transact-SQL)

그룹 식별자 및 해당 그룹에 포함된 모든 누락된 인덱스의 식별자와 같은 특정 그룹의 누락된 인덱스에 대한 정보를 반환합니다.

sys.dm_db_missing_index_details(Transact-SQL)

누락된 인덱스에 대한 자세한 정보를 반환합니다. 예를 들어 인덱스가 누락된 테이블의 이름과 식별자 및 누락된 인덱스를 구성해야 하는 열과 열 유형을 반환합니다.

sys.dm_db_missing_index_columns(Transact-SQL)

인덱스가 없는 데이터베이스 테이블 열에 대한 정보를 반환합니다.

이러한 동적 관리 개체에 의해 반환된 정보를 도구 또는 스크립트에서 사용하여 누락된 인덱스를 구현할 CREATE INDEX DDL 문을 생성할 수 있습니다.

트랜잭션 일관성

동적 관리 개체의 행에 대한 개별적인 수정 내용은 트랜잭션 측면에서 일관되지 않습니다. 즉, 쿼리를 중단하거나 묶는 트랜잭션을 롤백해도 해당 쿼리의 누락된 인덱스에 대한 정보가 들어 있는 행은 여전히 남아 있습니다.

전체 트랜잭션만 지원되며 검사점과 부분 롤백은 지원되지 않습니다.

[!참고]

테이블의 메타데이터가 변경되면 해당 테이블에 대한 모든 누락된 인덱스 정보가 이러한 동적 관리 개체에서 삭제됩니다. 테이블 메타데이터는 테이블에서 열을 추가하거나 삭제할 때 또는 테이블의 열에 인덱스를 만들 때 변경될 수 있습니다.

XML 실행 계획 MissingIndexes 요소

동적 관리 개체 결과에서 식별된 누락된 인덱스와 쿼리의 상관 관계를 지정하려면 XML 실행 계획의 MissingIndexes 요소를 확인합니다. MissingIndexes 요소에 대해서는 다음 예에서 설명합니다.

<ShowPlanXML…>

 <BatchSequence>

  <Batch>

   <Statements>

    <StmtSimple…>

     <StatementSetOptions… />

      <QueryPlan…>

        <MissingIndexes>

        <MissingIndexGroup Impact="22.8764">

         <MissingIndex Database="[ADVENTUREWORKS2008R2]" Schema="[Person]" Table="[Address]">

          <ColumnGroup Usage="EQUALITY">

           <Column Name="[PostalCode]" ColumnId="4" />

          </ColumnGroup>

          <ColumnGroup Usage="INEQUALITY">

           <Column Name="[ModifiedDate]" ColumnId="5" />

          </ColumnGroup>

          <ColumnGroup Usage="INCLUDE">

           <Column Name="[AddressLine1]" ColumnId="2" />

           <Column Name="[AddressLine2]" ColumnId="3" />

           <Column Name="[StateProvinceID]" ColumnId="1" />

          </ColumnGroup>

         </MissingIndex>

        </MissingIndexGroup>

       </MissingIndexes>

MissingIndexes 요소에 있는 정보는 Transact-SQL 문 자체를 포함하는 StmtSimple 요소에 설명된 특정 쿼리의 성능을 향상시킬 인덱스를 확인하는 데 도움이 됩니다. 그런 다음 이 요소에 대해 반환된 정보를 사용하여 CREATE INDEX DDL 문을 작성할 수 있습니다.

누락된 인덱스 기능 설정 및 해제

누락된 인덱스 기능은 기본적으로 설정되어 있습니다. 이 기능을 설정 또는 해제하거나 동적 관리 개체를 쿼리할 때 반환되는 테이블을 다시 설정하기 위한 컨트롤은 제공되지 않습니다. SQL Server를 다시 시작하면 누락된 인덱스 정보가 모두 삭제됩니다.

sqlservr 명령 프롬프트 유틸리티에 -x 인수를 사용하여 SQL Server 인스턴스를 시작한 경우에만 이 기능을 해제할 수 있습니다. 자세한 내용은 sqlservr 응용 프로그램을 참조하십시오.