mssql sqlserver 获取运行sql脚本,缺失索引的情况分析


摘要:
下文讲述通过系统函数,获取sqlserver服务启动后,运行的一段时间内,缺失索引的情况统计,如下所示:
实验环境:sqlserver 2008 R2


在数据库查询优化中,我们使用最多的情况就是对”查询列和返回列”新建索引,使查询脚本可以快速检索到相应的数据,
下文讲述mssql sqlserver提供的自动查找出缺失索引的方法分享:
缺失索引的查找方法,主要通过以下几个系统视图获取相关缺失索引信息:

  sys.dm_db_missing_index_details
  sys.dm_db_missing_index_groups
  sys.dm_db_missing_index_group_stats
  sys.dm_db_missing_index_columns(index_handle)


一、sys.dm_db_missing_index_details

sys.dm_db_missing_index_details 记录自sqlserver服务重启前所有运行sql脚本中缺失索引的情况。

mssql_sqlserver_sys.dm_db_missing_index_details视图内容说明

mssql_sqlserver_sys.dm_db_missing_index_details视图内容说明


—–返回值列说明—-
index_handle:缺失索引标识信息,唯一标识列;
database_id :缺失索引涉及数据库;
object_id :缺失索引涉及表;
equality_columns:where 条件采用等式 例 where tableName.[列名] =’值’
equality_columns 存储”列名”信息
inequality_columns :采用非等式的其它条件的列名信息
where tableName.[列名] < > ‘值’
where tableName.[列名] > ‘值’
where tableName.[列名] < '值' where tableName.[列名] like '%值%' inequality_columns 中存储此种操作模式涉及的"列名"信息 included_columns:查询中涉及的返回列(select ...) statement:索引涉及的表对象
例:
针对此表中的内容创建索引信息
create index ix_****** on [表名] (equality_columns/inequality_columns) include(included_columns)
—注意事项:
缺失索引表,只保留sqlserver服务器重启后的sql脚本的缺失情况。
即:需经常对此视图进行关注,获取更多的数据库优化信息


二、sys.dm_db_missing_index_groups

返回特定索引组中的缺失索引信息

三、sys.dm_db_missing_index_group_stats

2.mssql_sqlserver_sys.dm_db_missing_index_group_stats返回信息说明

2.mssql_sqlserver_sys.dm_db_missing_index_group_stats返回信息说明


返回索引缺失索引建立后,对性能的预估提升
返回集合中:
avg_user_impact:新建此索引后,sql脚本查询提升的百分比

四、sys.dm_db_missing_index_columns(index_handle)

返回索引索引列信息,接收参数index_handle来源于缺失索引系统视图 sys.dm_db_missing_index_details

五、获取缺失索引信息-举例说明

  /*
获取前20条缺失索引的情况
*/
SELECT TOP 20 
         DB_NAME() AS [数据库名称] ,
         d.[statement] AS [表名] ,
         equality_columns  as [列名1],
         inequality_columns  as [列名2],
         included_columns as [包含列]
 FROM    sys.dm_db_missing_index_groups g
         INNER JOIN sys.dm_db_missing_index_group_stats s ON s.group_handle = g.index_group_handle
         INNER JOIN sys.dm_db_missing_index_details d ON d.index_handle = g.index_handle
order by s.avg_total_user_cost desc