1、B樹
- 這里的 B 是 Balance(平衡)的縮寫。它是一種多路的平衡搜索樹。
- 它跟普通的平衡二叉樹的不同是,B樹的每個節點可以存儲多個數據,而且每個節點不止有兩個子節點,最多可以有上千個子節點。
- B樹中每個節點都存放着索引和數據,數據遍布整個樹結構,搜索可能在非葉子節點結束,最好的情況是O(1)。
- 一般一棵 B 樹的高度在 3 層左右,3 層就可滿足百萬級別的數據量
B樹 每個節點都存儲了一定的范圍區間,區間更多的情況下,搜索也就更快。
比如普通的二叉樹對於1~100的索引值,首先分為1~50和51~100兩部分。
而B樹可以分為四個區間 1~25,26~50,51~75,76~100。甚至可以划分為更多區間,這樣一次就能排除四分之三的數據
2、B+樹
B+樹是B樹的一種變種,它與 B樹 的 區別 是:
- 葉子節點保存了完整的索引和數據,而非葉子節點只保存索引值,因此它的查詢時間固定為 log(n).
- 葉子節點中有指向下一個葉子節點的指針,葉子節點類似於一個單鏈表
- 正因為葉子節點保存了完整的數據以及有指針作為連接,B+樹可以增加了區間訪問性,提高了范圍查詢,而B樹的范圍查詢相對較差
- B+樹更適合外部存儲。因為它的非葉子節點不存儲數據,只保存索引。
- InnerDB使用的正是這種當做索引
B+樹的示意圖如下:
參考:https://blog.csdn.net/a519640026/article/details/106940115/