Mysql B-Tree和B+樹索引
Mysql加快數據查找使用B-Tree數據結構存儲索引數據,InnoDB存儲引擎實際使用B+Tree。下面首先介紹下B-Tree和B+Tree的區別:
一、B樹和B+樹索引(手繪圖簡要說明)
1.B-Tree索引:
2.B+Tree索引:
3.B-Tree 和B+Tree索引查找原理:
非葉子節點存儲索引關鍵字,葉子節點指針指向的是被索引的數據。節點槽中存放了指向子節點的指針(可以理解為兩個關鍵字之間),存儲引擎根據這些指針向下層查找。通過比較節點頁的值和要查找的值可以找到合適的指針進入下層子節點,這些指針實際上定義了子節點頁中值的上限和下限。
4.B-Tree 和B+Tree索引不同點:
1)B-Tree非葉子節點不僅存儲索引關鍵字還保存除關鍵字外的其他字段信息,而B+Tree非葉子節點只保存索引關鍵字。
2) B+Tree葉子每個葉子節點保存了指向下一葉子節點的指針(鏈表串聯),而B-Tree沒有。
擴展:MySQL的InnoDB引擎索引要使用B+樹而不是B樹
(因為B樹不管葉子節點還是非葉子節點,都會保存數據,這樣導致在非葉子節點中能保存的指針數量變少(有些資料也稱為扇出)
指針少的情況下要保存大量數據,只能增加樹的高度,導致IO操作變多,查詢性能變低;
看過一篇比較好的博客文章介紹的很清晰:https://www.seoxiehui.cn/article-155967-1.html )