資料庫索引資料結構分析
為什麼要有b樹?
計算機有乙個區域性性原理,就是說,當乙個資料被用到時,其附近的資料也通常會馬上被使用。所以當你用紅黑樹的時候,你一次只能得到乙個鍵值的資訊,而用b樹,可以得到最多m-1個鍵值的資訊。這樣來說b樹當然更好了。
另外一方面,同樣的資料,紅黑樹的階數更大,b樹更短,這樣查詢的時候當然b樹更具有優勢了,效率也就越高。
一、b樹
b樹的結構要求:
1)根節點至少有兩個子節點
2)每個節點有m-1個key,並且以公升序排列
3)位於m-1和m key的子節點的值位於m-1 和m key對應的value之間
4)其它節點至少有m/2個子節點
5)所有葉子節點都在同一層
二、b+樹
b+樹是b-樹的變體,也是一種多路搜尋樹:
1.其定義基本與b-樹同,除了:
2.非葉子結點的子樹指標與關鍵字個數相同;
3.非葉子結點的子樹指標p[i],指向關鍵字值屬於[k[i], k[i+1])的子樹(b-樹是開區間);
5.為所有葉子結點增加乙個鏈指標;
6.所有關鍵字都在葉子結點出現;
三、b*樹
b*樹是對b+樹進行的又一次的公升級。在b+樹的非根和非葉子結點再增加指向兄弟的指標;
四、mysql中索引的資料結構
1、myisam引擎
myisam中有兩種索引,分別是主索引和輔助索引,在這裡面的主索引使用具有唯一性的鍵值進行建立,而輔助索引中鍵值可以是相同的。myisam分別會存乙個索引檔案和資料檔案。它的主索引是非聚集索引。當我們查詢的時候我們找到葉子節點中儲存的位址,然後通過位址我們找到所對應的資訊。
2、innodb引擎
innodb索引和myisam最大的區別是它只有乙個資料檔案,在innodb中,表資料檔案本身就是按b+tree組織的乙個索引結構,這棵樹的葉節點資料域儲存了完整的資料記錄。所以我們又把它的主索引叫做聚集索引。而它的輔助索引和myisam也會有所不同,它的輔助索引都是將主鍵作為資料域。所以,這樣當我們查詢的時候通過輔助索引要先找到主鍵,然後通過主索引再找到對於的主鍵,得到資訊。
因為innodb的資料檔案本身要按主鍵聚集,所以innodb要求表必須有主鍵(myisam可以沒有),如果沒有顯式指定,則mysql系統會自動選擇乙個可以唯一標識資料記錄的列作為主鍵,如果不存在這種列,則mysql自動為innodb表生成乙個隱含字段作為主鍵,這個字段長度為6個位元組,型別為長整形。
innodb索引和myisam索引的區別:
一是主索引的區別,innodb的資料檔案本身就是索引檔案。而myisam的索引和資料是分開的。
資料庫索引 資料結構
我們就來說一說其中的原因。改進後的b 樹基於b 樹,b 樹又基於b樹,所以我們先從b樹談起 我們還是以person id,name,age 這個例項來講訴b樹。b樹是這樣的乙個資料結構 d為大於1的乙個正整數,稱為b tree的度。h為乙個正整數,稱為b tree的高度。每個非葉子節點由n 1個ke...
MySql資料庫索引底層資料結構
索引是幫助資料庫高效獲取資料的排好序的資料結構。常見的資料結構有 hash 二叉樹 紅黑樹 b樹 b 樹。首先來看如果採用hash,它是把資料進行hash直接對應磁碟儲存引用位址,這樣查詢資料直接告訴磁碟資料在哪,查詢很快。但是 hash 還是有些不足 那就是不能範圍查詢,如果通過大於或者小於去篩選...
資料庫索引使用的資料結構
說白了,索引問題就是乙個查詢問題。資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢 更新資料庫表中資料。索引的實現通常使用b樹及其變種b 樹。在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算...