• 文件特点
    主文件主关键字 有序,因此可以对 一组记录 建立 一个 索引项(非稠密索引)
  • 索引顺序存取方法 / ISAM
    专门为磁盘存取设计的文件组织方法
    主文件柱面 集中存放,同时建立 三级索引主索引柱面索引磁道索引 文件的记录在 同一盘组 存放时,应先集中放在一个柱面上,然后再顺序放在相邻的柱面上;对于同一柱面,应按照盘面的顺序来存放。
    如下图是存放在一个磁盘组上的ISAM文件
  • 索引的排序 desc_磁道

  • 每个柱面 建立一个 磁道索引磁道索引 中的每个 磁道索引项 由两部分组成:基本索引项溢出索引项
    每个索引项都包括 关键字指针 两项。
    关键字 表示该磁道中最末一个记录的关键字(在此为 最大关键字)。
    指针 指示该柱面上的磁道索引位置。
    如下图所示:
  • 索引的排序 desc_柱面_02

  • 柱面索引 也是存放在 某个柱面 上,若柱面索引较大,占多个磁道时,可以建立 柱面索引的索引,也就是 主索引
  • 在ISAM文件上检索记录时,
    先从 主索引 出发,找到相应的 柱面索引
    再从 柱面索引 找到记录所在柱面的 磁道索引
    最后从 磁道索引 找到 记录所在磁道的第一个记录的位置
    由此出发在该磁道上进行 顺序查找 直到找到为止。
  • 每个柱面上还开辟有一个 溢出区 ,并且磁道索引项中设有 溢出索引项 ,这是为了 插入记录 所设置的。
    ISAM文件中记录是按 关键字顺序 存放的,则在 插入记录 时需要 移动记录 ,并将同一磁道上最后一个记录移至溢出区,还要修改 磁道索引项
    每个柱面的 基本区顺序存储结构溢出区链表结构 ,同一磁道溢出的记录由 指针 相链。
    该磁道索引的 溢出索引项 中的 关键字 指示 该磁道溢出的记录的最大关键字 ,指针指示在溢出区中的第一个记录。
  • 举例
    如下图a为插入前某一柱面上的状态
  • 索引的排序 desc_溢出区_03

  • 如下图b为插入 R65时,将第二道中关键字大于65的记录顺次后移,使 R90 溢出至溢出区的情况
  • 索引的排序 desc_磁道_04

  • 如下图c为插入 R65 之后的状态,此时2道的基本索引项的关键字改为80,且溢出索引项的关键字改为90,其指针指向第4道第一个记录即 R90
  • 索引的排序 desc_磁道_05

  • 如下图d是相继插入 R95 和 R83 后的状态,R95 插入在第3道的第一个记录的位置而使 R145 溢出。而由于 80 < 83 < 90,则 R83 被直接插入到溢出区,作为第二道在溢出区的第一个记录,并将它的指针指向 R90 的位置,同时修改第二道索引的溢出索引项的指针指向 R83
  • 索引的排序 desc_溢出区_06

  • 溢出区的三种设置方法
    1、集中存放 :整个文件设一个大的单一的溢出区
    2、分散存放:每个柱面设一个溢出区(上图12.8中就是使用此法)
    3、集中与分散相结合 :溢出时记录先移至每个柱面各自的溢出区,待满之后再使用公共溢出区
  • ISAM文件的删除操作
    只需找到 待删除的记录 ,再起存储位置上作 删除标记 即可,不需要移动记录或改变指针,但在经过多次的增删后,文件的结构可能变得很不合理。可能会有大量的记录进入溢出区,而基本区中又浪费很多空间,需要周期地整理 ISAM 文件,填满基本区而空出溢出区。
  • ISAM文件中柱面索引的位置
    通常 磁道索引 放在 每个柱面的第一道上
    柱面索引不应该放在文件的第一个柱面上;每一次检索都需要先查找柱面索引,则磁头需在各柱面间来回移动,希望 磁头移动距离的平均值最小。
    因此 柱面索引 应放在 数据文件的中间位置的柱面上