1. 程式人生 > 其它 >Java多執行緒01:什麼是執行緒和執行緒的建立

Java多執行緒01:什麼是執行緒和執行緒的建立

1.簡介

B+樹是一顆多路搜尋樹。

一顆 m 階的B+樹主要特點:
每個結點至多有m個子女
非根結點關鍵值個數範圍: [m/2 - 1, m - 1]
相鄰葉子節點是通過指標連起來的,並且是關鍵字大小排序的。
B+樹和B樹區別:
1. B-樹內部節點是儲存資料的;而B+樹內部節點是不儲存資料的,只作索引作用,它的葉子節點才儲存資料。
2. B+樹相鄰的葉子節點之間是通過連結串列指標連起來的,B-樹卻不是。
3. B-樹中任何一個關鍵字出現且只出現在一個結點中,而B+樹可以出現多個結點中。

2.B+插入






3.B+查詢

以下面的B+樹為例:

B+樹單值查詢


B+樹範圍查詢


4.B+樹的刪除

幾種情況

以下面的B+樹為例:假設當前有這麼一顆5階的B+樹

情況1:如果關鍵字個數大於⌈m/2⌉,直接刪除即可;

情況2:如果關鍵字個數大於⌈m/2⌉-1,並且刪除的關鍵字存在於父子節點中,那麼需要相應調整父子節點的值



情況3:如果刪除該關鍵字後,關鍵字個數小於⌈m/2⌉-1,兄弟節點可以借用

以下面5階的B+樹為例



情況4:在刪除關鍵字後,如果導致其結點中關鍵字個數不足,並且兄弟結點沒有得借用的話,需要合併兄弟結點

以下面5階的B+樹為例




5.經典面試題

1.InnoDB一顆B+樹可以存放多少行資料?

2.為什麼索引結構預設使用B+樹,而不是B-Tree,Hash雜湊,二叉樹,紅黑樹?

Hash雜湊,只適合等值查詢,不適合範圍查詢。
一般二叉樹,可能會特殊化為一個連結串列,相當於全表掃描。
紅黑樹,是一種特化的平衡二叉樹,MySQL 資料量很大的時候,索引的體積也會很大,記憶體放不下的而從磁碟讀取,樹的層次太高的話,讀取磁碟的次數就多了。
B-Tree,葉子節點和非葉子節點都儲存資料,相同的資料量,B+樹更矮壯,也是就說,相同的資料量,B+樹資料結構,查詢磁碟的次數會更少。