12.3 索引文件

  • 索引表
    一张指示文件的 逻辑记录物理记录 之间的对应关系的表
    如下图
    在这里插入图片描述

  • 索引项
    索引表 中的每个记录。
    每个 索引项(记录) 都由 关键字指针 组成

  • 索引文件
    包括 文件数据区索引表 两大部分的文件叫作 索引文件
    文件数据区 存放 主文件
    索引表 既可以是一级,也可以有多级索引

  • 索引文件有两种:
    索引顺序文件索引项总是按关键字有序,数据区 关键字有序
    索引非顺序文件索引项 总是按关键字有序,数据区 不按关键字顺序排列

  • 索引表 是由 系统程序 自动生成的。
    记录输入建立数据区的同时建立一个索引表,表中的 索引项记录输入的先后次序 排列,待全部记录输入完毕再对索引表进行排序。
    如下图,是个 索引非顺序文件
    在这里插入图片描述

  • 索引文件的检索方式
    直接存取
    按关键字存取

  • 检索
    查找索引表,若索引表上存在该记录,则根据索引项的指示读取 外存 上该记录;否则说明外存上不存在该记录,也就是不需要访问外存。
    一般来说,索引项 的长度比 主文件记录 的多,通常可以将索引表依次读入内存,由此在索引文件中进行检索只访问外存两次,一次读索引,一次读记录
    由于 索引表有序的,则查找索引表时可以用 折半查找法

  • 修改
    删除一个记录,仅需删除相应的索引项
    插入一个记录时,应将 记录 置于 数据区的末尾 ,同时在索引表的合适位置插入索引项(索引表有序)
    更新记录时,应将更新后的记录置于数据区的末尾,同时修改索引表相应的索引项(保持索引表的有序性)

  • 多级索引表
    记录数目 很大时,索引表 也很大,一个物理块可能装不下,就是无法一次从外存读入内存,仍需要多次访问外存。
    为此可以对索引表建立一个索引,称为查找表
    如下图b,假设下图的 索引表b 需要占用 3个物理块的内存每个物理块 容纳 3个索引
    在这里插入图片描述
    上图b索引表 建立的 查找表 如下
    在这里插入图片描述
    检索记录时,先查找 查找表 ,再查 索引表 ,然后 读取记录3次访问外存即可。
    查找表 中项目还多,则可以建立 更高一级索引 ,通常最高可有四级索引:
    第三查找表 --> 第二查找表 --> 查找表 --> 索引表 --> 数据文件

  • 静态索引
    各级索引 均为 顺序表结构
    优点:结构简单
    缺点:修改不方便,每次修改都要重组索引(当数据文件在使用过程中 记录变动较多 时,应采用 动态索引

  • 动态索引
    索引表采用 查找树表 (二叉排序树,B-树,键树)或者 哈希表。
    它们本身就是 层次结构,无需建立多级索引
    建立索引表的过程排序的过程
    插入或者删除记录时,修改索引方便
    使用查找树表作索引时,查找索引所需访问的外存次数的最大值 恰为 查找树的深度比较次数 + 1次访问外存读取主文件记录 = 深度

  • 稠密索引
    数据文件中记录不按关键字顺序排列,则必须对每个记录建立一个索引项,如此建立的索引表称之为稠密索引。
    此时若索引查找不成功不需要去查找主文件,即可以进行 预查找
    缺点是索引表占据的存储空间较大

  • 非稠密索引
    若数据文件中的记录按关键字顺序有序,则可对一组记录建立一个索引项,这种索引表称之为非稠密索引。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值