索引 index
什么是索引
如学生花名册,默认是学生有序的,今天的新申请的QQ号数字比以前申请的要大。如此,这些数据有序的,主要目的是方便以后查询。数据表事先按要查询的关键字列索引后,以后要查询时可以使用二分查找—折半法。
如我们经常按用户ID号或用户名登陆等操作,可以对数据原表建立一个附属的文件,保存查询依据的记录顺序。但这样做要增加额外的存储空间,增加数据的复杂度,但最大好处是提高查询效率。 从顺序查找的n/2 降到log2(n)
引例:如有学生表
隐藏的记录号 | 学号 | 姓名 | 身高 |
---|---|---|---|
1 | 01 | 张三 | 175 |
2 | 02 | 李四 | 165 |
3 | 05 | 张六 | 181 |
4 | 04 | 陈东 | 166 |
5 | 03 | 艾化 | 178 |
如果学生进入系统,按学号登陆,学号无序,只能顺序查找,如果有n 个学生,每个学生登陆时平均表中查找次数 n/2次.
如果事先针对学号列建立索引(按学生排列的每个记录的位置,出场顺序记录下来):Index_xh 又可按姓名建立索引 index_xm
index_xh | index_xm |
---|---|
01 ->1 | 艾化->5 |
02->2 | 陈东-> 4 |
03->5 | 李四->2 |
04 ->4 | 张六->3 |
05->3 | 张三->1 |
可见,如果有了索引后,变顺序查找为二分查找,有N个记录,平均查找次数从n/2降到 log2(n)。如对100万个记录中数据查找,平均查找次从50万降到20次。
索引的缺点:增加存储空间(但比把原表复制成一个有序的新表空间开销少),数据复杂度,如果物理表中的数据,特别是索引关键字经常变动,经常增删,必须要重新索引一次,对海量的数据来说,重新索引一次是很耗费资源。所以索引,并不适合经常增删改关键字的表。如学校教务处的学生表可以建立索引;对贴吧里的贴子表不适合建立索引.
索引分类
聚集索引 (clustered index)
把数据按索引项的顺序进行物理排序。要生成一个新表,完全打