sys.dm_db_missing_index_details (Transact-SQL)

返回有关缺失索引的详细信息,不包括空间索引。

在 Windows Azure SQL Database 中,动态管理视图不能公开将影响数据库包含的信息,也不能公开有关用户可以访问的其他数据库的信息。 要避免公开此类信息,需要将包含不属于已连接租户的数据的每一行都筛选掉。

适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。

列名

数据类型

说明

index_handle

int

标识特定的缺失索引。 该标识符在服务器中是唯一的。 index_handle 是此表的密钥。

database_id

smallint

标识带有缺失索引的表所驻留的数据库。

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。 每个内存优化索引中均包含表的所有列。

语句

nvarchar(4000)

索引缺失的表的名称。

注释

sys.dm_db_missing_index_details 返回的信息会在查询优化器对查询进行优化时更新,因而不是持久不变的。 缺失索引信息只保留到重新启动 SQL Server 前。 如果数据库管理员要在服务器回收后保留缺失索引信息,则应定期制作缺失索引信息的备份副本。

若要确定特定缺失索引所属的缺失索引组,可以查询 sys.dm_db_missing_index_groups 动态管理视图,方法是基于 index_handle 列将该视图与 sys.dm_db_missing_index_details 同等联接。

在 CREATE INDEX 语句中使用缺失索引信息

若要针对内存优化索引和基于磁盘的索引,将 sys.dm_db_missing_index_details 返回的信息转换为 CREATE INDEX 语句,应将相等列放置在不等列之前,并且它们应该一起组成索引键。 应该使用 INCLUDE 子句将包含列添加到 CREATE INDEX 语句。 若要确定相等列的有效顺序,请基于其选择性排序:首先列出选择性最强的列(列列表中的最左侧)。

有关内存优化索引的详细信息,请参阅在内存优化表上使用索引的指导原则

事务一致性

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

权限

必须授予用户 VIEW SERVER STATE 权限或表示 VIEW SERVER STATE 权限的任何权限,才能查询此动态管理视图。

请参阅

参考

sys.dm_db_missing_index_columns (Transact-SQL)

sys.dm_db_missing_index_groups (Transact-SQL)

sys.dm_db_missing_index_group_stats (Transact-SQL)