區別:
1.數據存儲位置
B樹每個節點都存儲了索引和數據
B+樹只有葉子節點存儲數據,非葉子節點僅存儲索引
2.葉子節點的鏈接
B+樹的所有葉子節點通過指針連接成一個雙向鏈表,可以高效地進行范圍查詢或者順序遍歷
B樹則沒有這樣的連接關系,查詢時需要通過遞歸訪問,并且范圍查詢更復雜
3.插入和刪除操作
B樹需要考慮非葉子節點和葉子節點的分裂和合并
B+樹由于非葉子節點不存儲數據,僅起到索引的作用,插入和刪除操作對內部節點影響較小
4.適用場景
B樹適用于操作頻繁的場景,因為它能在每個節點存儲數據,操作可以直接在各個節點進行,相應速度較快
B+樹適用于大量范圍查詢、順序訪問和高效存儲的場景
為什么MySQL選擇B+樹作為索引?
B+樹的所有值都存儲在葉子節點,內部節點僅僅作為索引使用,可以高效地進行范圍查詢和順序查詢
B+樹是平衡樹,所有葉子節點都在同一層級,無論查詢哪個數據,查找路徑的長度都是相同的,時間復雜度O(log N),插入、刪除也是如此
B+樹的節點具有高度的扇出性,每個節點包含多個子節點,這使得它的高度保持的非常低,每次讀入一個節點可以包含更多信息,減少磁盤I/O次數,提升效率
B+樹不僅適用于單一列的索引,也可以用于復合索引
我目前還在學習階段,文章中可能有錯誤和不足,歡迎大家斧正!