1. 管理公司一台服务器, 上面放的东西挺多的. 有一天有个哥们告诉我现在程序卡的厉害. 我给他说, 是时候读点优化的书了. 别一天到晚没个正形, 现在写的程序卡的跑不动. 他说我本地
是好好的, 跑的很快. 我说别扯那么多没用的, 服务器不比你的本子强得多. 待洒家上去看看. 不看不知道一看吓一跳, CPU 占用在 95 上下. 开个程序是不卡, 可整点有些时间是卡的一匹. 这就令人很难受了.
本来服务器上也没有什么, 就一个网站和几个数据库. 那一个个分析吧, 打开任务管理器和资源监视器, CPU 占用达到 93, 这个还是普通, 有时间到 98 99.
2. 这不要了亲命了吗, 打开资源监视器看看什么占用的最多吧. 一看果然是数据库占用最多, 数据服务占用过大
这个为了重现占用过高, 我把自己建的索引都删除掉后, sqlservr.exe 立马成为, 人群中最靓的仔. 占用独占大头. 看来只有试出来绝招了. 作为面向浏览器编程的程序员, 首先搜索一下. 网上还真有建设性意见. 都说是索引缺失
还贴心的给了一段查询索引的语句. 把查出的结果做非聚集索引, 就可以了. 贴上代码.
- SELECT TOP 10
- [Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0)
- , avg_user_impact
- , TableName = statement
- , [EqualityUsage] = equality_columns
- , [InequalityUsage] = inequality_columns
- , [Include Cloumns] = 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
- ORDER BY [Total Cost] DESC;
微软名字起的也很直白, 直接叫 missing_index, 就是 sqlserver 经过分析认为这些字段处理和查询是最耗时的, 最好在 EqualityUsage 上包含的字段上加个非聚集索引. 前几个用时是后几名的好几个数量级.
加了索引立马飞起.
现在优化过, 耗时都在一个数量级. 如果没有优化是不同的几个数量级.
来源: https://www.cnblogs.com/qiaqia-liu/p/10687619.html