美文网首页
少了点什么?数据库会告诉你!--2018-01-29

少了点什么?数据库会告诉你!--2018-01-29

作者: 疯狂十字军 | 来源:发表于2018-01-29 16:04 被阅读0次

大家都知道,索引能提升数据库的查询和更新效率。那么当SQL SERVER每天都运行那么多的SQL语句的时候,怎么才能快速的找到效率提升点呢?
在SQL SERVER中,有一批动态管理视图(DMV)会存放missing index的信息(SQL SERVER启动以来),这些动态管理视图就是sys.dm_db_missing_index_###

使用下面的SQL能快速的找到当前数据库中各个表缺失的索引,以及这些索引可能带来的收益.

SELECT TOP 25
dm_mid.database_id AS DatabaseID, 
dm_migs.avg_user_impact*(dm_migs.user_seeks+dm_migs.user_scans) Avg_Estimated_Impact,
dm_migs.avg_user_impact,dm_migs.user_seeks,dm_migs.user_scans,
dm_migs.last_user_seek AS Last_User_Seek,
object_name(dm_mid.object_id,dm_mid.database_id) AS [TableName],
'CREATE INDEX [IX_' + object_name(dm_mid.object_id,dm_mid.database_id) + '_'
+ REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.equality_columns,''),', ','_'),'[',''),']','') +
CASE WHEN dm_mid.equality_columns IS NOT NULL AND dm_mid.inequality_columns IS NOT NULL THEN '_' ELSE '' END
+ REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.inequality_columns,''),', ','_'),'[',''),']','')+ ']'+ ' ON ' + dm_mid.statement
+ ' (' + ISNULL (dm_mid.equality_columns,'')
+ CASE WHEN dm_mid.equality_columns IS NOT NULL AND dm_mid.inequality_columns IS NOT NULL THEN ',' ELSE '' END
+ ISNULL (dm_mid.inequality_columns, '') + ')' + ISNULL (' INCLUDE (' + dm_mid.included_columns + ')', '') AS Create_Statement 
FROM sys.dm_db_missing_index_groups dm_mig
INNER JOIN sys.dm_db_missing_index_group_stats dm_migs
ON dm_migs.group_handle = dm_mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details dm_mid
ON dm_mig.index_handle = dm_mid.index_handle
WHERE dm_mid.database_ID = DB_ID()
ORDER BY Avg_Estimated_Impact DESC 
GO
MissingIndex_List.png

从上面的截图可以看出,第三列显示,缺失的索引能提升的性能比例,第四列则是这个索引查找次数(seek),第五列则是扫描次数(scan).
一般情况下,我们都会执行提升效率最高的那个创建索引的SQL(Create_Statement),但是尤其要注意的是,部分Create_Statement会建立同名的但是包含性列(include)不一样的索引,也会建立一些包含另一个索引的无效索引,因此在执行前需要针对同一个表的索引进行筛选后再新建.

最后,尽量少的建立索引,能合并的两个或多个索引尽量合并成一个.
毕竟索引会影响插入和更新效率的.

用起来!!!

相关文章

  • 少了点什么?数据库会告诉你!--2018-01-29

    大家都知道,索引能提升数据库的查询和更新效率。那么当SQL SERVER每天都运行那么多的SQL语句的时候,怎么才...

  • 友吃| 公认的「20个健康硬指标」:越胖的人,健康风险越高!!

    什么是健康? 因人而异 对于糖尿病患者来说 他会告诫你少吃糖 如果你问肝病患者 他会告诉你少喝酒别熬夜! 所以想要...

  • 2018-01-29

    2018-01-29

  • 2017-12-03

    一个人会告诉你开始是什么 一个人会告诉你结束是什么 一个人会告诉你喜欢是什么 一个人会告诉你爱情是什么 总会有一个...

  • 如果你会日语,能够给你带来哪些好处?

    在这个见个人都会说几句日语的当下,不会日语确实少了点什么...今天日本村外教网就告诉大家如果你会日语,能够给你带来...

  • 杂记–你只是少喝了点鸡汤

    你才刚20岁出头,刚刚踏出学校的大门,心情还沉浸在与同学分别的不舍当中。你对未来的一切都充满了未知的热情,你不情愿...

  • 每顶帽子下,都藏着一个爱美的小女人

    冬天来了,你的衣橱里是否缺了点什么? 什么?你不知道?你觉得没缺什么? 算了,让小编来告诉你,是帽子! 时尚的单品...

  • 请求与命令

    如果告诉对方,我们希望他们不做什么,他们或者会困惑我们到底要什么,比如“你能不能少花点时间在工作”,或者当着一个禁...

  • 不会爱了

    爱是什么? 你的父母会告诉你,爱是时刻的挂念。你的恋人会告诉你,爱是温馨的缠绵。你的老师会告诉你,爱是严格的要求。...

  • Sweet Dream | 不愿醒

    也许是听了一周的睡公主怀旧之后无形之中多了点什么 也许是少和你说几句话会显得我更适合你一点 也许是你真的有可能会对...

网友评论

      本文标题:少了点什么?数据库会告诉你!--2018-01-29

      本文链接:https://www.haomeiwen.com/subject/proxzxtx.html