为什么需要索引
索引是定义在存储表基础之上,有助于无需检查所有记录而快速定位所需记录的一种辅助存储结构,由一系列存储在磁盘上的索引项(index entries)组成,每个索引项又由两部分构成:
索引字段:由Table中某些列(通常是一列)中的值串接而成,索引中通常存储了索引字段的每一个值(也有例外)。索引字段类似于词典中的词条。
行指针:指向Table中包含索引字段值的记录在磁盘上的存储位置。行指针类似于词条在词典中出现的页码。
关于索引的一些概念
1.存储索引项的文件称为索引文件,相对应地,存储表称为主文件。
2.索引文件是一种辅助存储结构,其存在与否不改变存储表的物理结构。然而它的存在可以明显提高存储表的访问速度。
3.索引文件组织方式有两种:
排序索引文件:按索引字段值的某一种顺序组织存储。
散列索引文件:依据索引字段值使用散列函数分配散列桶的方式存储。
4.在一个表上可以针对不同的属性或属性组合建立不同的索引文件,可建立多个索引文件。索引字段的值可以是Table中任何一个属性的值或任何多个属性值的组合值。
5.索引文件比主文件小很多。通过检索一个小的索引文件(可全部装载进内存),快速定位后,再有针对性地读取大的主文件中的有关记录,来提高访问速度,这在主文件字段非常多的时候可以带来很大的性能提升。
6.有索引时,更新操作必须同步更新索引文件和主文件,否则根据索引查找的结果会不正确。
关于索引应用的评价
索引技术使检索效率大幅提高,但同时增加了存储空间以及维护负担(维护主文件的同时也要维护索引文件),这也是一种以空间换时间的方法。
衡量索引性能好坏的指标有:1.访问时间2.插入时间3.删除时间4.空间负载5.支持存取的有效性(如是否支持范围查询)
选择在哪些字段上建立索引时,要综合考虑以上指标。
应该对经常出现在检索条件、连接条件、分组计算条件中的属性建立索引。
几个概念
字段:
索引字段:在索引文件中,每个索引项对应的索引字段。
排序字段:在主文件中,按照排序字段进行排序存储。
码:
关系中的码:主码(主键,Primary Key)具有唯一性和最小性。
索引中的码(不一定具有唯一性):
排序码:对主文件进行排序存储的那些属性或属性组
索引码:即索引字段,不一定具有唯一性
搜索码:在主文件中查找记录的属性或属性集
使用SQL进行索引创建与维护
SQL语言关于索引的基本知识
1.当定义Table后,如果定义了主键,则系统自动创建主索引。
2.索引可以由用户创建和撤销,可以在任何属性上创建。
3.当索引被创建后,无论是主索引,还是用户创建的索引,DBMS都将自动维护所有的索引,使其与Table一致。
4.当Table被删除后,定义在该Table上的所有索引将自动被撤销。
关于索引的语句
创建索引:
CREATE [unique] INDEX indexname ON tablename(colname [asc|desc] {,colname [asc|desc]...});
撤销索引:
DROP INDEX indexname;
选择哪些属性创建索引,以及如何创建与维护索引,如何利用索引改善数据库的运行性能,是DBA的重要职责。但作为应用程序员也需要了解一些索引的概念和原理。
索引的分类
稠密索引与稀疏索引
稠密索引:对于主文件中每个记录,都有一个索引项与之对应,这样的索引称为稠密索引。
稀疏索引:对于主文件中部分记录,有索引项与之对应,这样的索引称为稀疏索引。
那么,稀疏索引如何定位记录呢?
定位索引字段为K的记录,需要
1.首先找相邻的小于K的最大索引字段值所对应的索引项
2.从该索引项所对应的记录开始顺序进行Table检索,找到比K大的值则结束
因此,稀疏索引要求主文件必须按对应索引字段的属性进行排序存储。
稀疏索引与稠密索引相比,空间占用更少,维护任务更轻,但速度要慢。
(未完,又留了个坑,以后补)