-
索引表
一张指示文件的逻辑记录
和物理记录
之间的对应关系的表
如下图
-
索引项
索引表
中的每个记录。
每个索引项(记录)
都由关键字
和指针
组成 -
索引文件
包括文件数据区
和索引表
两大部分的文件叫作索引文件
文件数据区
存放主文件
索引表
既可以是一级,也可以有多级索引 -
索引文件有两种:
索引顺序文件
:索引项
总是按关键字
有序,数据区
按关键字有序
索引非顺序文件
:索引项
总是按关键字
有序,数据区
不按关键字顺序排列 -
索引表
是由系统程序
自动生成的。
在记录输入建立数据区的同时建立一个索引表,表中的索引项
按记录输入的先后次序
排列,待全部记录输入完毕再对索引表进行排序。
如下图,是个索引非顺序文件
:
-
索引文件的检索方式
直接存取
按关键字存取 -
检索
查找索引表,若索引表上存在该记录,则根据索引项的指示读取外存
上该记录;否则说明外存上不存在该记录,也就是不需要访问外存。
一般来说,索引项
的长度比主文件记录
小的多,通常可以将索引表依次读入内存,由此在索引文件中进行检索只访问外存两次,一次读索引,一次读记录。
由于索引表
是有序的,则查找索引表时可以用折半查找法
。 -
修改
删除一个记录,仅需删除相应的索引项
插入一个记录时,应将记录
置于数据区的末尾
,同时在索引表的合适位置插入索引项(索引表有序)
更新记录时,应将更新后的记录置于数据区的末尾,同时修改索引表相应的索引项(保持索引表的有序性) -
多级索引表
当记录数目
很大时,索引表
也很大,一个物理块可能装不下,就是无法一次从外存读入内存,仍需要多次访问外存。
为此可以对索引表建立一个索引,称为查找表。
如下图b,假设下图的索引表b
需要占用3个物理块的内存
,每个物理块
容纳3个索引
为上图b索引表
建立的查找表
如下
检索记录时,先查找查找表
,再查索引表
,然后读取记录
。3次访问外存即可。
若查找表
中项目还多,则可以建立更高一级索引
,通常最高可有四级索引:
第三查找表 --> 第二查找表 --> 查找表 --> 索引表 --> 数据文件 -
静态索引
各级索引
均为顺序表结构
。
优点:结构简单
缺点:修改不方便,每次修改都要重组索引(当数据文件在使用过程中记录变动较多
时,应采用动态索引
) -
动态索引
索引表采用查找树表
(二叉排序树,B-树,键树)或者 哈希表。
它们本身就是层次结构
,无需建立多级索引
建立索引表的过程
即排序的过程
插入或者删除记录时,修改索引方便
使用查找树表作索引时,查找索引所需访问的外存次数的最大值
恰为查找树的深度
(比较次数
+1次访问外存读取主文件记录
=深度
) -
稠密索引
数据文件中记录不按关键字顺序排列,则必须对每个记录建立一个索引项,如此建立的索引表称之为稠密索引。
此时若索引查找不成功时不需要去查找主文件,即可以进行预查找
缺点是索引表占据的存储空间较大 -
非稠密索引
若数据文件中的记录按关键字顺序有序,则可对一组记录建立一个索引项,这种索引表称之为非稠密索引。
12.3 索引文件
最新推荐文章于 2023-03-12 12:30:08 发布