12.4.1 索引顺序存取方法文件 / ISAM文件
-
文件特點
主文件 按 主關鍵字 有序,因此可以對 一組記錄 建立 一個 索引項(非稠密索引) -
索引順序存取方法 / ISAM:
專門為磁盤存取設計的文件組織方法
主文件 按 柱面 集中存放,同時建立 三級索引 :主索引 、柱面索引 和 磁道索引
文件的記錄在 同一盤組 存放時,應先集中放在一個柱面上,然后再順序放在相鄰的柱面上;對于同一柱面,應按照盤面的順序來存放。
如下圖是存放在一個磁盤組上的ISAM文件:
每個柱面 建立一個 磁道索引 ,磁道索引 中的每個 磁道索引項 由兩部分組成:基本索引項 和 溢出索引項。
每個索引項都包括 關鍵字 和 指針 兩項。
關鍵字 表示該磁道中最末一個記錄的關鍵字(在此為 最大關鍵字)。
指針 指示該柱面上的磁道索引位置。
如下圖所示:
柱面索引 也是存放在 某個柱面 上,若柱面索引較大,占多個磁道時,可以建立 柱面索引的索引,也就是 主索引。 -
在ISAM文件上檢索記錄時,
先從 主索引 出發(fā),找到相應的 柱面索引,
再從 柱面索引 找到記錄所在柱面的 磁道索引 ,
最后從 磁道索引 找到 記錄所在磁道的第一個記錄的位置,
由此出發(fā)在該磁道上進行 順序查找 直到找到為止。 -
每個柱面上還開辟有一個 溢出區(qū) ,并且磁道索引項中設有 溢出索引項 ,這是為了 插入記錄 所設置的。
ISAM文件中記錄是按 關鍵字順序 存放的,則在 插入記錄 時需要 移動記錄 ,并將同一磁道上最后一個記錄移至溢出區(qū),還要修改 磁道索引項。
每個柱面的 基本區(qū) 是 順序存儲結構 ;溢出區(qū) 是 鏈表結構 ,同一磁道溢出的記錄由 指針 相鏈。
該磁道索引的 溢出索引項 中的 關鍵字 指示 該磁道溢出的記錄的最大關鍵字 ,指針指示在溢出區(qū)中的第一個記錄。 -
舉例:
如下圖a為插入前某一柱面上的狀態(tài)
如下圖b為插入 R65時,將第二道中關鍵字大于65的記錄順次后移,使 R90 溢出至溢出區(qū)的情況
如下圖c為插入 R65 之后的狀態(tài),此時2道的基本索引項的關鍵字改為80,且溢出索引項的關鍵字改為90,其指針指向第4道第一個記錄即 R90
如下圖d是相繼插入 R95 和 R83 后的狀態(tài),R95 插入在第3道的第一個記錄的位置而使 R145 溢出。而由于 80 < 83 < 90,則 R83 被直接插入到溢出區(qū),作為第二道在溢出區(qū)的第一個記錄,并將它的指針指向 R90 的位置,同時修改第二道索引的溢出索引項的指針指向 R83。
-
溢出區(qū)的三種設置方法
1、集中存放 :整個文件設一個大的單一的溢出區(qū)
2、分散存放:每個柱面設一個溢出區(qū)(上圖12.8中就是使用此法)
3、集中與分散相結合 :溢出時記錄先移至每個柱面各自的溢出區(qū),待滿之后再使用公共溢出區(qū) -
ISAM文件的刪除操作
只需找到 待刪除的記錄 ,再起存儲位置上作 刪除標記 即可,不需要移動記錄或改變指針,但在經(jīng)過多次的增刪后,文件的結構可能變得很不合理??赡軙写罅康挠涗涍M入溢出區(qū),而基本區(qū)中又浪費很多空間,需要周期地整理 ISAM 文件,填滿基本區(qū)而空出溢出區(qū)。 -
ISAM文件中柱面索引的位置
通常 磁道索引 放在 每個柱面的第一道上;
柱面索引不應該放在文件的第一個柱面上;每一次檢索都需要先查找柱面索引,則磁頭需在各柱面間來回移動,希望 磁頭移動距離的平均值最小。
因此 柱面索引 應放在 數(shù)據(jù)文件的中間位置的柱面上 。
總結
以上是生活随笔為你收集整理的12.4.1 索引顺序存取方法文件 / ISAM文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 检测VC++Redistributabl
- 下一篇: 频谱仪原理简介一