快速找出数据库的性能问题之:缺失索引 &无用的索引
上一篇 /
下一篇 2012-05-10 09:12:35
/ 个人分类:数据库
我们通过减少查询中的不必要的读取操作从而使得查询的性能得到提升。一个查询在数据库中执行的读操作越多,那么就对磁盘,CPU,内存的压力越大。除非整个数据库的数据全在在内存中,否则每次的读操作都会把数据从磁盘读入到内存中,然后返回。ow*T.e%b,u+w Rt0 一个查询在读取一个资源的时候,通过加锁会阻止其他的查询对这个资源进行修改,此时其他要操作这个资源的查询就需要等待,从而导致了延时。51Testing软件测试网a&\PIX{ JK;I O"uU
51Testing软件测试网FYw+i Y7^h 诚然,有些等待是必须的,读取操作也是必须的,但是一些因为我们代码或者设计导致的过度的读取操作和等待,那就会严重影响性能,尤其是当数据库的访问量开始变大的时候。51Testing软件测试网Vk ^7M2?a
51Testing软件测试网)K [tr.h _ 可以说在SQLServer中,最高效的读取数据方式就是通过索引去获取数据。如果在数据表中存在缺失索引的问题,结果可想而知。51Testing软件测试网%`JZ-f.u0E
51Testing软件测试网D2NL8F.Au5X 在本篇中,我们将会讨论下面几个议题:
#` @Z3d#j%Z051Testing软件测试网Y'm2y(l
cK
\ ● 如何识别缺失索引性能问题
8m(Z:It0j.~
A+p"f;H051Testing软件测试网r.Amaiq
{ ● 识别没有用的索引51Testing软件测试网v3Fi~go!rQ
51Testing软件测试网\Ka-tPf
l'N ● 如何解决上面的问题
]1r*c [%NS[02rFWhl*^?_0 确实本篇讲述的内容涉及到了一些与数据库性能调优的话题,对于调优而言,难点很多时候在于如何正确的找出性能问题。51Testing软件测试网$V_
rg`x
#LR.nb5y'h
A%IV0 下面,我们首先来看看缺失索引。
_'BU/V1M({Nwa2u"aO051Testing软件测试网Y9^[YM#C5Z 缺失索引
qrpx/c051Testing软件测试网'[h U1U$G{]1p
SQL
Server可以在表字段上面建立索引,从而使得Where和Join这样的语句执行的更快。当查询优化器在优化一个查询的时候,它会保存一些来暗示哪些
列上可能建立索引之后可能性能会更快的信息。我们可以通过动态管理视图sys.dm_db_missing_index_details来查看,运行如下
查询
V"xK.J-o x051Testing软件测试网G,RYmUH
查询的结果如下: