【1】線性索引
索引就是把一個關鍵字與它對應的記錄相關聯的的過程。
索引是為檢索而存在的。
一個索引由若干個索引項構成,每個索引項至少應包含關鍵字和其對應的記錄在存儲器中的位置等信息。
索引技術是組織大型數據庫以及磁盤文件的一種重要技術。
索引按照結構可以分為線性索引,樹形索引和多級索引。
所謂線性索引就是將索引項集合組織為線性結構,也稱為索引表。
重點了解三種線性索引:稠密索引,分塊索引和倒排索引。
【2】稠密索引
稠密索引是指在線性索引中,將數據集中的每個記錄對應一個索引項。
所下圖所示:
對於稠密索引這個索引表而言,索引項一定是按照關鍵碼有序的排列。
為什么要這樣做呢?
索引項有序也就意味着,我們要查找關鍵字時,可以用折半,插值及斐波那契等有序查找算法。
比如要查找關鍵字18的記錄,如果直接從右側的數據表中查找,那只能順序查找。
需要查找6次才可以看到結果!!
而如果是從側的索引表中查找,只需兩次折半查找就可以得到18對應的指針。對應找到結果。
好吧!以上顯然是稠密所以優點。
如果數據集非常大,比如上億,那也就意味着索引也得同樣的數據集長度規模。
對於內存有限的計算機來說,可能就需要反復去訪問磁盤,查找性能大大下降。
稠密索引文件的每個記錄都有一個索引項,記錄在數據區存放是任意的,但索引是按序的,這種索引稱為稠密索引。
稠密索引文件的索引查找、更新都較方便,但由於索引項多,占用空間較大。
【3】分塊索引
注意理解:稠密索引是因為索引項和數據集的記錄個數相同,所以空間代價很大。
如何減少索引項的個數呢?
我們可以對數據集進行分塊,使其分塊有序,然后再對每一塊建立一個索引項(類似於圖書館的分塊)。
分塊有序是把數據集的記錄分成了若干塊,並且這些塊需要滿足兩個條件:
(1)塊內無序
每一塊內的記錄不要求有序
(2)塊間有序
比如要求第二塊所以記錄的關鍵字均要大於第一塊中所有記錄的關鍵字,第三塊要大於第二塊。
只有塊間有序才有可能在查找時帶來效率。
對於分塊有序的數據集,將每塊對應一個索引項,這種索引方法叫做分塊索引。
分塊索引的索引項結構分為三個數據項:
a: 最大關鍵碼--存儲每一塊中的最大關鍵字。
b: 存儲每一塊中記錄的個數以便於循環時使用。
c: 用於指向塊首數據元素的指針,便於開始對這一塊中記錄進行遍歷。
如下圖所示:
在分塊索引表中查找,可以分為兩步:
a: 在分塊索引表中查找要查的關鍵字所在塊。
由於分塊索引表是塊間有序的,因此很容易利用折半插值等算法得到結果。
b:根據塊首指針找到相應的塊,並在塊中順序查找關鍵碼。
因為塊中可以是無序的,因此只能順序查找。
【4】倒排索引
關於倒排索引,請參見一下幾篇文章:
(1)《倒排索引1》
(2)《倒排索引2》
Good Good Study, Day Day Up.
順序 選擇 循環 總結