您的位置:首页 > 数据库

建立查询系统性能调优(3)----数据库索引优化

2013-06-01 20:35 579 查看
本文笔者在广东吃饭的时候突然想到的...近期就有想写几篇关于建立查询的文章,所以回家到之后就奋笔疾书的写出来发表了

索引是对数据库表中一列或多列的值进行排序的一种结构,应用索引可快速访问数据库表中的特定信息。其实道理很简单,比如我们要从字典中查找一个字,那么这个字典就是我们所要面临的数据库,索引就好比是字典后面的拼音或者部首索引表,当须要查询一个字的时候我们首先去检索拼音或者部首索引表,然后再去字典中查找具体的位置,这样我们就加快数据库的查询速度。

索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为次序的,而非聚簇索引就不一样了(下一篇文章将分析罕见的索引)。不言而喻的字典本身的内容以及后面的拼音检索表就是聚簇索引,因为他们都是按照26个字母的次序排列的。而后面的部首检索表就是一个非聚簇索引,他并不是按照每个字地点的具体的位置排列的,而是通过特定的排列规矩进行排序的。

应用索引的利益就是查询起来效率高了,但任何事物都有正反两方面,应用索引也会降低数据库的效率,这里的效率是指在增编削的时候会比不讲索引效率慢。道理很简单如果一本字典随时在变化那么须要变的不仅仅是这个字典的内容还有就是这个字典后面的拼音或者部首检字表。所以有索引的情况下增编削的效率肯定会降低的。

而且须要注意的是有索引不一定效率就会晋升,试想一本字典可以把全部的字全部放在检索表中(实际上这是没有意义的)这样的话如果要查询一个字那么就相当于查询了多次,首先在庞大的检索表中查询一遍,然后再去数据库中查询这个字的详细内容,这要比直接从字典查询效率要低。

建立索引不一定就提高查询的效率,这取决于索引是否公道,以及查询是否用到索引。并非是在任何字段上简单地建立索引就可以提高查询速度。索引的建立,会带来更多的系统开销,因为系统要消耗资源去维护它,如果建立了没有用到的索引,不适当的索引,过多的索引,反而会致使查询性能下降。总之索引的建立,要看表的结构,数据的分布,还有你要用到哪些数据,如果把索引建立在你基本不须要的数据列上,是基本不会发挥作用的举例如下:

(1)全表扫描

只在主键上建立聚集索引:

Selectid,name,dept,emdate from person 用时:20546毫秒(即:21秒)

不在主键上建立聚集索引,只建普通索引

Selectid,name,dept,emdate from person 用时:17923毫秒(即:18秒)

以上查询执行的实际上索引不会发挥作用,因为提取的是全部数据。聚集索引在这里会消耗更多的资源,所以会看到,不建立聚集索引比建立聚集索引还要快

每日一道理

微笑,是春天里的一丝新绿,是秋日里的一缕阳光,是骄阳下的一片浓荫,是冬雪中的一株梅红……微笑着去面临吧,你会感到人生是那样的温馨与甜蜜!

(2):按日期进行过滤(用到索引)

在主键上建立聚集索引,在emdate上建立非聚集索引:

Select id,name,dept,emdatefrom person where emdate>dateadd(day,+1,getdate()) 用时:12376毫秒(12秒)

在主键上建立聚集索引,在emdate上没有索引:

selectid,name,dept,emdate from person where emdate>dateadd(day,+1,getdate()) 用时:21296毫秒(21秒)

在主键上建立非聚集索引,在emdate上建立非聚集索引:

selectid,name,dept,emdate from person where emdate>dateadd(day,+1,getdate()) 用时:11590毫秒(12秒)

在主键上建立非聚集索引,在emdate上建立聚集索引:

selectid,name,dept,emdate from person where emdate>dateadd(day,+1,getdate()) andemdate<dateadd(day,+3,getdate()) 用时:5233毫秒(5秒)

虽然每条语句提取出来的都是30万条数据,各种情况的差异却是比较大的,特别是将聚集索引建立在日期列时的差异。事实上,如果您的数据库真的有几千万条记载的话,差距会更明显。

关于索引方面的系统优化和其他优化一样,都须要根据实际的情况而定,了解了索引的道理那么就可以有的放矢,公道的建立索引进而提高系统的查询效率。

文章结束给大家分享下程序员的一些笑话语录:

马云喜欢把自己包装成教主,张朝阳喜欢把自己包装成明星,李彦宏喜欢把自己包装成的很知性,丁磊喜欢把自己包装的有创意,李开复总摆出一副叫兽的样子。看来的。其实我想说,缺啥补啥,人之常情。

---------------------------------
原创文章 By
建立和查询
---------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: