다음을 통해 공유


sys.dm_db_missing_index_details(Transact-SQL)

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance

누락된 인덱스에 대한 자세한 정보를 반환합니다.

Azure SQL Database에서 동적 관리 뷰는 데이터베이스 봉쇄에 영향을 미치는 정보를 노출하거나 사용자가 액세스할 수 있는 다른 데이터베이스에 대한 정보를 노출할 수 없습니다. 이 정보를 노출하지 않으려면 연결된 테넌트에 속하지 않는 데이터가 포함된 모든 행이 필터링됩니다.

열 이름 데이터 형식 설명
index_handle int 누락된 특정 인덱스를 식별합니다. 식별자는 서버 전체에서 고유합니다. index_handle 는 이 테이블의 키입니다.
database_id smallint 누락된 인덱스가 있는 테이블이 있는 데이터베이스를 식별합니다.

Azure SQL Database에서 값은 단일 데이터베이스 또는 탄력적 풀 내에서 고유하지만 논리 서버 내에는 고유하지 않습니다.
object_id int 인덱스가 누락된 테이블을 식별합니다.
equality_columns nvarchar(4000) 양식의 같음 조건자를 나타내는 열의 쉼표로 구분된 목록:

table.column = constant_value
inequality_columns nvarchar(4000) 다음 형식의 같지 않음 조건자에 적용되는 쉼표로 구분된 열 목록입니다.

table.column>constant_value

"="가 아닌 모든 비교 연산자는 같지 않음을 표시합니다.
included_columns nvarchar(4000) 쿼리에 대한 열을 포함하는 데 필요한 열의 쉼표로 구분된 목록입니다. 포함 열 또는 포함된 열에 대한 자세한 내용은 포함된 열을 사용하여 인덱스 만들기를 참조 하세요.

메모리 최적화 인덱스(해시 및 메모리 최적화 비클러스터형)의 경우 무시합니다 included_columns. 테이블의 모든 열은 모든 메모리 최적화 인덱스에 포함됩니다.
statement nvarchar(4000) 인덱스가 없는 테이블의 이름입니다.

설명

반환된 sys.dm_db_missing_index_details 정보는 쿼리 최적화 프로그램에서 쿼리를 최적화하고 유지되지 않을 때 업데이트됩니다. 누락된 인덱스 정보는 데이터베이스 엔진이 다시 시작될 때까지만 유지됩니다. 서버 재활용 후에도 누락된 인덱스 정보를 유지하려면 데이터베이스 관리자가 정기적으로 누락된 인덱스 정보의 백업 복사본을 만들어야 합니다. sqlserver_start_time sys.dm_os_sys_info 열을 사용하여 마지막 데이터베이스 엔진 시작 시간을 찾습니다.

누락된 특정 인덱스의 일부인 누락된 인덱스 그룹을 확인하려면 열에 index_handle 따라 동적 관리 뷰를 연결하여 쿼리 sys.dm_db_missing_index_groupssys.dm_db_missing_index_details 수 있습니다.

참고 항목

이 DMV에 대한 결과 집합은 600개 행으로 제한됩니다. 각 행에는 누락된 인덱스가 하나 있습니다. 누락된 인덱스가 600개 이상인 경우 누락된 기존 인덱스를 처리해야 최신 인덱스를 볼 수 있습니다.

CREATE INDEX 문에서 누락된 인덱스 정보 사용

메모리 최적화 및 디스크 기반 인덱스 모두에 대해 CREATE INDEX 문으로 반환 sys.dm_db_missing_index_details 된 정보를 변환하려면 같지 않음 열 앞에 같음 열을 배치하고 함께 인덱스의 키를 만들어야 합니다. 또한 INCLUDE 절을 사용하여 CREATE INDEX 문에 포괄 열을 추가해야 합니다. 같음 열에 대한 유효 순서를 확인하려면 선택성에 따라 순서를 지정합니다. 가장 선택적인 열을 먼저 나열합니다(열 목록에서 맨 왼쪽). 누락된 인덱스 기능의 제한 사항을 포함하여 누락된 인덱스 제안을 사용하여 비클러스터형 인덱스 조정에 대해 자세히 알아봅니다.

메모리 최적화 인덱스에 대한 자세한 내용은 메모리 최적화 테이블의 인덱스를 참조 하세요.

트랜잭션 일관성

트랜잭션이 테이블을 만들거나 삭제하면 삭제된 개체에 대한 누락된 인덱스 정보가 포함된 행이 이 동적 관리 개체에서 제거되어 트랜잭션 일관성이 유지됩니다. 누락된 인덱스 기능의 제한 사항에 대해 자세히 알아봅니다.

사용 권한

SQL Server 및 SQL Managed Instance에서는 VIEW SERVER STATE 권한이 필요합니다.

SQL Database Basic, S0S1 서비스 목표 또는 탄력적 풀 내의 데이터베이스에 대해서는 서버 관리자 계정, Microsoft Entra 관리자 계정 또는 ##MS_ServerStateReader## 서버 역할의 멤버 자격이 필요합니다. 다른 모든 SQL Database 서비스 목표에 대해서는 데이터베이스에 대한 VIEW DATABASE STATE 권한 또는 ##MS_ServerStateReader## 서버 역할의 멤버 자격이 필요합니다.

SQL Server 2022 이상에 대한 사용 권한

서버에 대한 VIEW SERVER PERFORMANCE STATE 권한이 필요합니다.

예제

다음 예제에서는 현재 데이터베이스에 대한 누락된 인덱스 제안을 반환합니다. 누락된 인덱스 제안은 가능하면 서로, 그리고 현재 데이터베이스의 기존 인덱스와 결합되어야 합니다. 누락된 인덱스 제안을 사용하여 비클러스터형 인덱스를 조정하여 이러한 제안을 적용하는 방법을 알아봅니다.

SELECT
  CONVERT (varchar(30), getdate(), 126) AS runtime,  mig.index_group_handle,  mid.index_handle,
  CONVERT (decimal (28, 1), migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) ) AS improvement_measure,
  'CREATE INDEX missing_index_' + CONVERT (varchar, mig.index_group_handle) + '_' + CONVERT (varchar, mid.index_handle) + ' ON ' + mid.statement + ' (' + ISNULL (mid.equality_columns, '') + CASE
    WHEN mid.equality_columns IS NOT NULL
    AND mid.inequality_columns IS NOT NULL THEN ','
    ELSE ''
  END + ISNULL (mid.inequality_columns, '') + ')' + ISNULL (' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement,
  migs.*, mid.database_id, mid.[object_id]
FROM sys.dm_db_missing_index_groups mig
	INNER JOIN sys.dm_db_missing_index_group_stats migs ON migs.group_handle = mig.index_group_handle
	INNER JOIN sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle
WHERE CONVERT (decimal (28, 1),migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans)) > 10
ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC

참고 항목

Microsoft Tiger 도구 상자인덱스 생성 스크립트는 누락된 인덱스 DMV를 검사하여 중복으로 제안된 인덱스를 자동으로 제거하고, 영향이 적은 인덱스를 구문 분석하고, 검토를 위해 인덱스 생성 스크립트를 생성합니다. 위의 쿼리에서와 같이 인덱스 생성 명령을 실행하지 않습니다. 인덱스 생성 스크립트는 SQL Server 및 Azure SQL Managed Instance에 적합합니다. Azure SQL Database의 경우 자동 인덱스 튜닝을 구현하는 것이 좋습니다.

다음 단계

다음 문서에서 누락된 인덱스 기능에 대해 자세히 알아봅니다.