今天想到数据库的优化,第一项就想到了索引,所以想重新认识一下索引。首先百度百科了一下,定义还是首要看的嘛!
定义:索引是一个单独的、物理的数据结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
我去!!!这定义谁下的,读起来拗口不说,还死难理解对吧?还是看看它可以干什么吧!
使用索引可以快速访问数据库表中的特定信息。索引是对数据库表中一列或多列值进行排序的一种结构;例如EMPLOYEE表中的姓名(NAME)列,如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助你更快的获得该信息;这样看来,数据库使用索引的方式与你使用书籍中的索引的方式很相似。这样的一说,很容易理解了不是? 再比如这样的一个查询:select * from table1 where id=10000.如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是ID这一列上建立的索引),即可在索引中查找。由于索引值经过某种算法优化过的,因而查找次数要少的多的多;可见索引是用来定位的;
还有数据库索引分三种:唯一索引、主键索引和聚集索引。
这样看来,数据库使用索引带来如下好处:
1、大大加快数据的检索速度,
2、创建唯一性索引(唯一索引是不允许其中任何两行具有相同索引值的索引。),保证数据库表中每一行数据的唯一性;(个人认为使用唯一索引不太契合实际)
3、加快表与表之间的连接;
4、在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
凡是有利必有弊,YOU KNOW THAT!
使用索引的缺点:
1、索引需要占物理空间。
2、当最表中的数据进行增加、删除和修改的时候,索引页要动态的维护,降低了数据的维护速度;
以上就是数据库索引的一个大致介绍。
下面了解一下聚集索引(一个表只能包含一个聚集索引): 聚集索引是索引的一种,该索引中键值的逻辑顺序决定了表中相应行的物理顺序;聚集索引对于那些经常要搜索的范围值的列特别有效。
适用情况如下:
1、含有大量非重复值的列
2、适用BETWEEN,>,>=,<,<=返回一个范围值的列
3、被连续访问的列
4、返回大型结果集的查询
5、经常被使用连接或Group by子句的查询访问的列
聚集索引能提高多行检索的速度,二非聚集索引对于单行的检索速度很快;
综上了哦!!!
建立索引的目的是加快对表中记录的查找或排序。但是为表设置索引要付出代价的:一是增加了数据库的存储空间,而是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。说白了,数据库索引就是为了提高表的搜索效率而对某些字段中的值建立的目录;
优缺点详细总结如下:
创建索引可以大大提高系统的性能。第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
因为,增加索引也有许多不利的方面。第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
以上大部分知识总结都来自百度百科,本人只是按自己的思绪整理了一下!
都是一些理论知识,具体实践还是要自己去摸索学习的!
原文地址:http://www.cnblogs.com/LinRosa/p/3777597.html