索引:就是把乙個關鍵字與它對應的記錄相關聯的過程,乙個索引由若干個索引項構成,每個索引項至少應包含關鍵字和其對應的記錄在儲存器中的位置等資訊。
索引按照結構可以分為:線性索引、樹形索引和多級索引。
線性索引是將索引項集合組織為線性結構,也稱為索引表。包括稠密索引、分塊索引、倒排索引。
乙個完美的引子:將資料集中的每個記錄對應乙個索引項
我母親年紀大了,記憶力不好,經常在家裡找不到東西,於是她想了乙個辦法。她用乙個小本子記錄了家裡所有小東西放置的位置,比如戶口本放在右手床頭櫃下面抽屜中,針線放在電視櫃中間的抽屜中,鈔票放在衣櫃……總之,她老人家把這些小物品的放置位置都記錄在了小本子上,並且每隔一段時間還按照本子整理一遍家中的物品,用完都放回原處,這樣她就幾乎再沒有找不到東西。從這件事情就可以看出,家中的物品儘管是無序的,但是如果有乙個小本子記錄,尋找起來也是非常容易的,而這小本子就是索引。
對於稠密索引這個索引表來說,索引項一定是按照關鍵碼有序的排列。通過對索引項的查詢,就可以找到丟應的結果位址,但是如果資料集非常大,比如說上億,那也就意味著索引同樣的資料規模,可能就需要反覆查詢記憶體和硬碟,效能可能反而下降了。
引子:圖書館如何藏書
分塊有序需要滿足兩個條件:塊內無序(有序更好,代價比較大)、塊間有序
對於分塊有序的資料集,將每塊對應乙個索引項,這種索引方法叫做分塊索引。
最大關鍵碼、塊長和塊首指標很容易理解。
平均查詢長度asl 為 在索引表中的平均查詢長度 + 在記錄(資料集)中的平均查詢長度。
假設 有m塊,每塊中共有t條記錄,顯然n = m * t。
故而 asl = (m+1)/2 + (t+1)/2 = (n/t + t)/2 + 1. 上式的最小值,即n/t = t,n = t^2,則最小的asl = n^(1/2) + 1;
可見,分塊索引的效率比順序查詢o(n) 高了很多,但比折半查詢法o(logn)還是有差別的,總的來說,分塊索引在兼顧了對細分塊不需要有序的情況下,大大增加了整體查詢的速度,所以普遍被用於資料庫查詢等技術的應用當中。
引子:搜尋引擎如何進行搜尋,能夠在非常快的速度之下顯示搜尋的最優匹配內容。
索引項的結構是次關鍵字碼和記錄號表,其中記錄號表儲存具有相同關鍵字的所有記錄的記錄號(可以是指向記錄的指標或者是該記錄的主關鍵字),這樣的索引方法就是倒排索引。
這時我們輸入book搜尋會立馬顯示有1 2 文章。
索引項的通用結構為:
1.次關鍵碼 比如上面的 英文單詞
2.記錄號表 比如上面的文章編號
倒排索引源於實際應用中需要根據屬性(或字段、次關鍵碼)的值來查詢記錄。這種索引表中的每一項都包括乙個屬性值和具有該屬性值的各記錄的位址。由於不是由記錄來確定屬性值,而是由屬性來確定記錄的位置,因而稱為倒排索引。
倒排索引的優點顯然是查詢記錄非常快,基本等於生成索引表後,查詢時都不用去讀取記錄,即可以得到結果。但是它的缺點是這個記錄號不定長,可多可少。
ps. 現實中的搜尋技術要複雜得多,涉及到太多內容。
查詢 線性索引查詢
索引就是把乙個關鍵字與它對應的記錄相關聯的過程,乙個索引由若干個索引項構成,每個索引項至少應包含關鍵字和其對應的記錄在儲存器中的位置等資訊。索引技術是組織大型資料庫以及磁碟檔案的一種重要技術。索引按照結構可以分為線性索引 樹形索引和多級索引。這裡只 線性索引,即將索引項集合組織為線性結構,也稱為索引...
線性索引查詢
索引就是把乙個關鍵字與它對應的記錄相關聯的過程,乙個索引由若干個索引項構成,每個索引項至少應包含關鍵字和其對應的記錄在儲存器中的位置等資訊。索引技術是組織大型資料庫以及磁碟檔案的一種重要技術。索引按照結構可以分為線性索引 樹形索引和多級索引。所謂的線性索引就是將索引項集合組織為線性結構,也稱為索引表...
線性索引查詢
本文參考自 大話資料結構 資料結構的最終目的是提高資料的處理速度,索引就是為了加快查詢速度而設計得一種資料結構。索引就是把乙個關鍵字與它對應的記錄相關聯的過程。索引按結構可以分為線性索引 樹形索引和多級索引。我們這裡只介紹線性索引。所謂線性索引就是將索引項集合組織為線性結構,也稱為索引表。重點介紹三...