初识索引
索引的概念
索引是定义在存储表的基础上,有助于无需检查所有记录而快速定位所需记录的一种辅助存储结构,由一系列存储在磁盘上的索引项组成,每一索引项又由两部分构成。即索引字段和行指针。
索引字段
由表中某些列通常是一列中的值串接而成。索引中通常存储了索引字段的每一个值。
行指针
指向表中包含索引字段值的记录在磁盘上的存储位置。
存储索引项文件的为索引文件,存储表称为主文件。
索引文件组织方式
(相对照的,主文件组织有堆文件,排序文件,散列文件,聚簇文件等多种方式)
排序索引文件:按索引字段值的某一种顺序组织存储
散列索引文件:依据索引字段值使用散列函数分配散列桶的方式存储
索引的作用
在一个表上针对不同属性或者属性组来@源gao*daima.com搞@代#码网合建立不同的索引文件,索引字段值可以是表中任何一个属性的值或者属性值的组合;
索引文件比主文件小得多,通过检索一个小的索引文件(可以完全装载进内存),快速定位之后,再有针对性的读取非常大的主文件中的相关记录;
有索引时,更新操作必须同步更新索引文件和主文件。保持其数据一致性。
SQL语言中的索引创建与维护
基础知识
当定义table之后,如果定义了主键,系统自动生成主索引;
索引可以由用户定义或者撤销;
当索引被创建后,不论是主索引还是用户定义的索引,DBMS都将自动维护所有索引;
当table被删除之后,定义在该表上的所有索引自动撤销。
创建,撤销索引
CREATE INDEX idxSname ON Student(Sname); DROP INDEX idxSname;
稠密索引与稀疏索引
稠密索引
对于主文件中每一个记录(形成的每一个索引字段值),都有一个索引项和它相对应,指明该记录所在位置。这样的索引称稠密索引。(dense index)
稀疏索引
对于主文件中的部分记录(形成的索引字段值),有索引项和它对应,这样的索引称为非稠密索引或者稀疏索引(sparse index)。
稀疏索引如何定位记录
定位索引字段值为K的记录,需要
首先找相邻的小于K的最大索引字段值所对应的索引项;从该索引项所对应的记录开始顺序进行table的检索
稀疏索引的使用要求:主文件必须是按照对应索引字段属性排序存储
相比稠密索引:空间占用更少,维护任务更轻,但速度更慢
平衡:索引项不指向记录指针,而是指向记录所在的存储块的指针,即每一存储块有一个索引项,而不是每条记录有一索引项——主索引
稠密索引如何定位记录
1.候选键属性的稠密索引 一一对应即可
2.非候选键属性的稠密索引,主文件按照索引字段值排序,对每一个不重复的第一个索引字段值建立索引项,相同索引字段值则在附近寻找;
3.非候选键属性的稠密索引,主文件未按照索引字段值排序,不要求索引项中的索引字段唯一,可以重复出现,以实现对主文件中对应索引字段值的指向;
4.非候选键属性的稠密索引,主文件未按照索引字段值排序,若要求索引中索引字段是唯一的,则可以引入一个中间层,指针桶;该指针桶就是第3种情况。