sys.dm_db_missing_index_columns (Transact-SQL)

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例

返回有关缺少索引的数据库表列的信息。 sys.dm_db_missing_index_columns 是动态管理功能。

语法

sys.dm_db_missing_index_columns(index_handle)  

参数

index_handle
唯一地标识缺失索引的整数。 它可以从下列动态管理对象中获得:

sys.dm_db_missing_index_details (Transact-SQL)

sys.dm_db_missing_index_groups (Transact-SQL)

返回的表

列名称 数据类型 描述
column_id int 列的 ID。
column_name sysname 表列的名称。
column_usage varchar(20) 查询使用列的方式。 可能的值及其说明如下:

EQUALITY:列有助于表示相等形式的谓词:
table.column = constant_value

不相等:列有助于表示不相等的谓词,例如,窗体的谓词:table.column>constant_value。 “=”之外的任何比较运算符都表示不相等。

INCLUDE:列不用于计算谓词,但用于其他原因,例如,用于涵盖查询。

注解

查询优化器优化查询时, sys.dm_db_missing_index_columns 返回的信息会更新,并且不会持久保存。 只有在重启数据库引擎之前,才会保留缺少索引信息。 如果数据库管理员要在服务器回收后保留缺失索引信息,则应定期制作缺失索引信息的备份副本。 使用 sys.dm_os_sys_info 中的 sqlserver_start_time 列查找上次数据库引擎启动时间。

事务一致性

如果事务创建或删除了一个表,则包含有关已删除对象的缺失索引信息的行将从此动态管理对象中删除,以保持事务一致性。

权限

必须授予用户 VIEW SERVER STATE 权限或任何隐含 VIEW SERVER STATE 权限的权限,以便查询此动态管理函数。

SQL Server 2022 及更高版本的权限

要求对服务器具有 VIEW SERVER PERFORMANCE STATE 权限。

示例

以下示例对 Address 表运行查询,然后使用 sys.dm_db_missing_index_columns 动态管理视图运行查询以返回缺失索引的表列。

USE AdventureWorks2022;  
GO  
SELECT City, StateProvinceID, PostalCode  
FROM Person.Address  
WHERE StateProvinceID = 9;  
GO  
SELECT mig.*, statement AS table_name,  
    column_id, column_name, column_usage  
FROM sys.dm_db_missing_index_details AS mid  
CROSS APPLY sys.dm_db_missing_index_columns (mid.index_handle)  
INNER JOIN sys.dm_db_missing_index_groups AS mig ON mig.index_handle = mid.index_handle  
ORDER BY mig.index_group_handle, mig.index_handle, column_id;  
GO  

如果可能,应将缺少的索引建议与当前数据库中的现有索引组合在一起。 了解如何在缺少索引建议的优化非聚集索引中应用这些建议。

后续步骤

在以下文章中详细了解缺少的索引功能: