sys.dm_db_missing_index_columns (Transact-SQL)

适用于:SQL ServerAzure 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

不等性:列构成表示不相等的谓词,例如,表 >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  

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

后续步骤

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