mssql sqlserver 检测索引的使用情况


摘要:
随着系统年头使用越来越久,有些表的索引存在很多很多,导致系统的插入操作变得越来越慢。
下文将讲述如何在数据库中获取索引的使用率。


例:

   数据库随着表查询优化 出现以下索引:
   create index Ix_tmp on tmp(filed1)
   create index Ix_tmp2 on tmp (filed1,field2)
   create index Ix_tmp3 on tmp (filed1,field2,filed3)

随着系统某些报表的废弃,伴随着不同的优化人员,对数据库做不同的优化,
导致表中出现了过多的索引,可能这些索引是无用的,
那么我们就需要对数据库索引进行检测,将一段时间内未被使用的索引,进行监测,并评估索引的可用性,是否可以进行删除操作,
达到提升数据库插入的效率。

—下文将展示如何查询索引的最后使用时间

  --查看数据库索引的使用情况
 select   
        object_name(a.object_id) as N'表名', 
        a.name N'索引名称',      
        b.a N'最后使用时间',
        b.b N'最后扫描时间',
        b.c N'用户索引查找次数',
        b.d N'用户索引扫描次数'
  from  
  sys.indexes a left join 
 (
   select object_id,database_id,index_id, max(last_user_seek) as a,
        max(last_user_scan) as b,sum(user_seeks) as c,sum(user_scans) as d 
        from sys.dm_db_index_usage_stats 
    where database_id =db_id()
    group by   object_id,database_id,index_id      
  ) b
     on   a.index_id = b.index_id
     and a.object_id = b.object_id   
     where   
      object_name(a.object_id) not like 'sys%'
      and a.name is not null  

注意事项:
以上查询的索引最后使用时间:
为DB服务器启动后”一段时间内”索引的最后使用时间
在实际应用中,需要在DB生产环境中,多次频繁的监控DB服务器,才能得到准确的索引是否使用的休息,然后再进行相关的分析。

mssql_sqlserver_索引最后一次使用时间获取

mssql_sqlserver_索引最后一次使用时间获取