SQL SERVER 2005 新增了查找缺失索引的视图,从这些视图中,我们可以比较轻易的看出创建那些索引对我们的应用系统有帮助。
SQL SERVER 2005 缺失索引视图如下:
sys.dm_db_missing_index_group_stats,返回缺失索引组的摘要信息
列名 | 数据类型 | 说明 |
---|---|---|
group_handle | int | 标识缺失索引组。此标识符在服务器中是唯一的。 其他列提供有关组中的索引被视为缺失的所有查询的信息。 一个索引组仅包含一个索引。 |
unique_compiles | bigint | 将从该缺失索引组受益的编译和重新编译数。许多不同查询的编译和重新编译可影响该列值。 |
user_seeks | bigint | 由可能使用了组中建议索引的用户查询所导致的查找次数。 |
user_scans | bigint | 由可能使用了组中建议索引的用户查询所导致的扫描次数。 |
last_user_seek | datetime | 由可能使用了组中建议索引的用户查询所导致的上次查找日期和时间。 |
last_user_scan | datetime | 由可能使用了组中建议索引的用户查询所导致的上次扫描日期和时间。 |
avg_total_user_cost | float | 可通过组中的索引减少的用户查询的平均成本。 |
avg_user_impact | float | 实现此缺失索引组后,用户查询可能获得的平均百分比收益。该值表示如果实现此缺失索引组,则查询成本将按此百分比平均下降。 |
system_seeks | bigint | 由可能使用了组中建议索引的系统查询(如自动统计信息查询)所导致的查找次数。有关详细信息,请参阅Auto Stats 事件类。 |
system_scans | bigint | 由可能使用了组中建议索引的系统查询所导致的扫描次数。 |
last_system_seek | datetime | 由可能使用了组中建议索引的系统查询所导致的上次系统查找日期和时间。 |
last_system_scan | datetime | 由可能使用了组中建议索引的系统查询所导致的上次系统扫描日期和时间。 |
avg_total_system_cost | float | 可通过组中的索引减少的系统查询的平均成本。 |
avg_system_impact | float | 实现此缺失索引组后,系统查询可能获得的平均百分比收益。该值表示如果实现此缺失索引组,则查询成本将按此百分比平均下降。 |
sys.dm_db_missing_index_groups
列名 | 数据类型 | 说明 |
---|---|---|
index_group_handle | int | 标识缺失索引组。 |
index_handle | int | 标识属于由 index_group_handle 指定的组的缺失索引。 一个索引组仅包含一个索引。 |
sys.dm_db_missing_index_details
列名 | 数据类型 | 说明 |
---|---|---|
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) | 用于查询的涵盖列的逗号分隔列表。有关涵盖列或包含列的详细信息,请参阅创建带有包含列的索引。 |
statement | nvarchar(4000) | 索引缺失的表的名称。
|
sys.dm_db_missing_index_columns
column_id | int | 列的 ID。 |
column_name | sysname | 表列的名称。 |
column_usage | varchar(20) | 查询使用列的方式。可能的值有:
值
说明
EQUALITY
列提供一个表示相等的谓词,其形式为:table.column =constant_value
INEQUALITY
列包含表示不等的谓词,例如,如下形式的谓词:table.column > constant_value“=”之外的任何比较运算符都表示不等。有关比较运算符的完整列表,请参阅比较运算符(数据库引擎)。
INCLUDE
列不用于谓词赋值,但用于其他原因,例如包含一个查询。
|
从这几个试图中,我们可以从DataBase中查找到一些有意思的信息;
1.查找单表的缺失索引,当然,稍微改动下,就可以查找整个数据库的
select db_name(d.database_id) dbname, object_name(d.object_id) tablename, d.index_handle,
d.equality_columns, d.inequality_columns, d.included_columns, d.statement as fully_qualified_object, gs.*
from sys.dm_db_missing_index_groups g
join sys.dm_db_missing_index_group_stats gs on gs.group_handle = g.index_group_handle
join sys.dm_db_missing_index_details d on g.index_handle = d.index_handle
where d.database_id = d.database_id and d.object_id = d.object_id
and object_name(d.object_id) = 'bizoffersearchby0042'
order by user_seeks desc