每個節點都儲存key和data,所有節點組成這棵樹,並且葉子節點指標為null。
只有葉子節點儲存data,葉子節點包含了這棵樹的所有鍵值,葉子節點不儲存指標。
後來,在b+樹上增加了順序訪問指標,也就是每個葉子節點增加乙個指向相鄰葉子節點的指標,這樣b+樹成了資料庫系統實現索引的首選資料結構。
原因有很多,最主要的是這棵樹矮胖
。一般來說,索引很大,往往以索引檔案的形式儲存的磁碟上,索引查詢時產生磁碟i/o消耗,相對於記憶體訪問,i/o訪問的消耗要高幾個數量級,所以評價乙個資料結構作為索引的優劣最重要的指標
就是在查詢過程中磁碟i/o操作次數的時間複雜度
。樹高度越小,i/o次數越少
。
那為什麼是b+樹而不是b樹呢,因為它內節點不儲存data,這樣乙個節點就可以儲存更多的key
。
在mysql中,最常用的兩個儲存引擎是myisam和innodb,它們對索引的實現方式是不同的。
myisam是非事務安全的,而innodb是事務安全的
myisam鎖的粒度是表級的,而innodb支援行級鎖
myisam支援全文型別索引,而innodb不支援全文索引
myisam相對簡單,效率上要優於innodb,小型應用可以考慮使用myisam
myisam表儲存成檔案形式,跨平台使用更加方便
myisam管理非事務表,提供高速儲存和檢索以及全文搜尋能力,如果在應用中執行大量select操作可選擇
innodb用於事務處理,具有acid事務支援等特性,如果在應用中執行大量insert和update操作,可選擇。
b+樹中只有葉子節點會帶有資料記錄
,而b樹則所有節點都指向資料記錄的行號,在內部節點出現的索引項不會再出現在葉子節點中。
b+樹中所有葉子節點都是通過指標連線在一起,而b樹不會。
非葉子節點不會帶上資料記錄,這樣,乙個塊中可以容納更多的索引項
,一是可以降低樹的高度,減少查詢時間。二是乙個內部節點可以定位更多的葉子節點。
葉子節點之間通過指標來連線,範圍掃瞄將十分簡單,而對於b樹來說,則需要在葉子節點和內部節點不停的往返移動。
參考
B樹,B 樹和B 樹 B 樹的區別
之前一些概念混淆,現在更正一下。b樹 b tree樹即b樹,b即balanced,平衡的意思。因為b樹的原英文名稱為b tree,而國內很多人喜歡把b tree譯作b 樹,其實,這種直譯不好,容易產生誤解。如人們可能會以為b 樹是一種樹,而b樹又是一種樹。事實上,b tree就是指b樹。特此說明。先...
B樹,B 樹和B 樹的區別
b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...
B樹,B 樹和B 樹的區別
即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進入左兒...