SQL优化:找到缺少的索引

上篇文章讲了如何查询索引的使用情况,前提是索引已经创建了。

这篇文章要讲的是SQL Server对系统中运行的sql进行监控,把系统中缺少的索引信息保存下来,提供给我们查询。

我们根据这些辅助的信息,结合实际的情况,比如:表上已经有的索引,涉及到的字段,以及具体的sql,判断如果创建了这些索引,是否真的能提高性能,如果真的能提高性能,就可以创建这些索引。

通过查询3个视图,可以了解如果创建了这个索引,对性能有多大的提升(Improvement_Measure ):

sys.dm_db_missing_index_groups

sys.dm_db_missing_index_group_stats

sys.dm_db_missing_index_details

代码如下:

SELECT TOP 30
         ROUND(s.avg_total_user_cost * s.avg_user_impact * ( s.user_seeks
                                                             + s.user_scans ),
               0) AS [Total Cost] ,
         s.avg_total_user_cost * ( s.avg_user_impact / 100.0 ) * ( s.user_seeks
                                                               + s.user_scans ) AS Improvement_Measure ,
         DB_NAME() AS DatabaseName ,
         d.[statement] AS [Table Name] ,
         equality_columns ,
         inequality_columns ,
         included_columns
 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
 WHERE   s.avg_total_user_cost * ( s.avg_user_impact / 100.0 ) * ( s.user_seeks
                                                               + s.user_scans ) > 10
 ORDER BY [Total Cost] DESC ,
         s.avg_total_user_cost * s.avg_user_impact * ( s.user_seeks
                                                       + s.user_scans ) DESC

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值