B樹,B 樹,紅黑樹 資料庫常見面試題

2021-09-13 11:43:08 字數 1277 閱讀 3891

b樹,b+樹,紅黑樹 資料庫常見面試題

**:hash索引和b+樹索引

hash索引等值查詢效率高,但是不能排序,因此不能進行範圍查詢

b+樹索引資料有序,能夠進行範圍查詢

二叉查詢樹,查詢到指定資料,效率其實很高logn。但是資料庫索引檔案有可能很大,關係型資料儲存了上億條資料,索引檔案大則上g,不可能全部放入記憶體中,

而是需要的時候換入記憶體,方式是磁碟頁。一般來說樹的乙個節點就是乙個磁碟頁。如果使用二叉查詢樹,那麼每個節點儲存乙個元素,查詢到指定元素,需要進行大量的磁碟io,效率很低。

而b樹解決了這個問題,通過單一節點包含多個data,大大降低了樹的高度,大大減少了磁碟io次數。

b樹包括b+樹的設計思想都是盡可能的降低樹的高度,以此降低磁碟io的次數,因為乙個索引節點就表示乙個磁碟頁,頁的換入換出次數越多,表示磁碟io次數越多,越低效。

b樹演算法減少定位資料所在的節點時所經歷的磁碟io次數,從而加快訪問速度。

假設乙個節點可以容納100個值,那麼3層的b樹可以容納100萬個資料。(根節點100值,第二層可以儲存99個節點(k-1),也就是99*100 個值,第三層可以儲存

(99*100-1)*100)結果是近似100萬個資料。而如果使用二叉查詢樹,則需要將近20層,也就是進行20次磁碟io,效能差距如此之大。

如mongodb資料庫使用,單次查詢平均快於mysql(但側面來看mysql至少平均查詢耗時差不多)。

因為b樹的每個節點除了儲存指向子節點的索引之外,還有data域,因此單一節點儲存的指向子節點的索引並不是很多,樹高度較高,磁碟io次數較多,

而b+樹單一節點儲存的指向子節點的索引更多,b+樹空間利用率高,因此b+樹高度更低,磁碟io次數更少,效能更好。

因為b樹的中間節點儲存了資料,所以整個樹的每一層都有可能查詢到要查詢的資料,查詢效能不穩定,

而b+樹所有的data都儲存在葉子節點,且葉子節點位於同一層,因此查詢效能穩定。

b樹如果想要進行範圍查詢,需要頻繁的進行二叉樹的中序遍歷,進行範圍查詢比較複雜,

b+樹要查詢的元素都位於葉子節點,且連線形成有序鍊錶,便於範圍查詢。

b樹主要用於檔案系統,和部分資料庫索引,如文件型資料庫mongodb

b+樹主要用於mysql資料庫索引。

紅黑樹當插入刪除元素的時候會進行頻繁的變色與旋轉(左旋,右旋),來保證紅黑樹的性質,浪費時間。

但是當資料量較小,資料完全可以放入記憶體中,不需要進行磁碟io,這時候,紅黑樹時間複雜度比b+樹低。

比如treeset treemap 和hashmap (jdk1.8)就是使用紅黑樹作為底層資料結構。

B樹 B 樹 B 樹 B 樹 紅黑樹

b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...

B樹 B 樹 B 樹 B 樹 紅黑樹

b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...

B樹 B 樹 B 樹 B 樹 紅黑樹

b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...