ISAM文件的检索 在ISAM文件上检索记录时从主索引出发找到相应的柱面索引;从柱面索引找到记录所在柱面的磁道索引;从磁道索引找到记录所在磁道的起始地址由此出发在该磁道上进行顺序查找直到找到为止若找遍该磁道均不存在此记录则表明该文件中无此记录;若被查找的记录在溢出区则可从磁道索引项的溢出索引项中得到溢出链表的头指针然后对该表进行顺序查找 【例】要在下图中查找记录R 先查主索引即读入CoTo;因为<则查找柱面索引的C T l (不妨设每个磁道可存放个索引项)即读人C T l ;因为<<所以进一步把C T 入内存;查磁道索引因为<所以C T 即为R 所存放的磁道读人C T 后即可查得R 为了提高检索效率通常可让主索引常驻内存并将柱面索引放在数据文件所占空间居中位置的柱面上这样从柱面索引查找到磁道索引时磁头移动距离的平均值最小 ISAM文件的插入操作 当插人新记录时首先找到它应插入的磁道若该磁道不满则将新记录插入该磁道的适当位置上即可;若该磁道已满则新记录或者插在该磁道上或者直接插入到该磁道的溢出链表上插入后可能要修改磁道索引中的基本索引项和溢出索引项 【例】依次将记录R R R 插入到上图所示的文件后第二个柱面的磁道索引及该柱面中主文件W的变化状况如下图所示 当插入R 时应将它插在C T l 因为<所以R 应插在该磁道的第一个记录的位置上而该磁道上原记录依次后移一个位置于是最后一个记录R 被移人溢出区由于该磁道上最大关键字由变成故它的溢出链表也由空变为含有一个记录R 的非空表因此将CT对应的磁道索引项中基本索引项的最大关键字由改为;将溢出索引项的最大关键字置为且令溢出链表的头指针指向R 的位置;类似地R和B被先后插入到第号柱面的第号磁道C T 上插入R 时R 被移到溢出区;插入R 时R 被移到溢出区即该磁道溢出链表上有两个记录虽然物理位置上R 在R 之前但作为按关键字有序的链表B 是链表上的第一个记录R 是第二个记录因此C T 对应的溢出索引项中最大关键字为而溢出链表头指针指向R的位置;C T 移出R 和移出R 后变为该磁道上最大关键字所以C T 对应的基本索引项中最大关键字由变为 ISAM文件中删除记录的操作 ISAM文件中删除记录的操作比插入简单得多只要找到待删除的记录在其存储位置上作删除标记即可而不需要移动记录或改变指针在经过多次的增删后文件的结构可能变得很不合理此时大量的记录进入溢出区而基本区中又浪费很多的空间 因此通常需要周期性地整理ISAM文件把记录读入内存重新排列复制成一个新的ISAM文件填满基本区而空出溢出区 |