7. B+树
一、B+樹(shù)是應(yīng)文件系統(tǒng)所需而產(chǎn)生的一種B樹(shù)的變形樹(shù)
1. 定義(使用階數(shù)m來(lái)定義)
所有的葉子節(jié)點(diǎn)包含了全部的關(guān)鍵字以及指向含有這些關(guān)鍵字記錄的指針,并且:
- 同一葉子節(jié)點(diǎn)中的關(guān)鍵字按大小順序排列
- 相鄰的葉子節(jié)點(diǎn)順序鏈接(相當(dāng)于是構(gòu)成了一個(gè)順序鏈表)
- 所有葉子節(jié)點(diǎn)在同一層
?
2. 和B樹(shù)的區(qū)別
對(duì)于非終端結(jié)點(diǎn),關(guān)鍵字的個(gè)數(shù)與其子樹(shù)的個(gè)數(shù)相同;不像B樹(shù),子樹(shù)的個(gè)數(shù)總比關(guān)鍵字的個(gè)數(shù)多1。
所有的關(guān)鍵字及相應(yīng)的指針都在葉子結(jié)點(diǎn)中;不像B樹(shù),有的關(guān)鍵字是在內(nèi)部結(jié)點(diǎn)中。(換句話說(shuō),在B+樹(shù)中,內(nèi)部結(jié)點(diǎn)僅僅起到索引的作用。在搜索過(guò)程中,如果待查詢的關(guān)鍵字和內(nèi)部結(jié)點(diǎn)的關(guān)鍵字一致,那么搜索過(guò)程不停止,而是繼續(xù)向下搜索這個(gè)分支)
?
?
二、關(guān)于B+樹(shù)的面試題
1. 為何B+樹(shù)用于數(shù)據(jù)庫(kù)索引?
B樹(shù)在提高了磁盤IO性能的同時(shí)并沒(méi)有解決元素遍歷的效率低下的問(wèn)題。B樹(shù)的其非終端結(jié)點(diǎn)同樣存儲(chǔ)著數(shù)據(jù),因此如果我們要找到具體的數(shù)據(jù),就需要進(jìn)行一次中序遍歷。正是為了解決這個(gè)問(wèn)題,B+樹(shù)應(yīng)運(yùn)而生。
B+樹(shù)的數(shù)據(jù)都存儲(chǔ)在葉子結(jié)點(diǎn)中,非終端結(jié)點(diǎn)均為索引,方便掃庫(kù),只需要遍歷葉子結(jié)點(diǎn)即可實(shí)現(xiàn)整棵樹(shù)的遍歷。所以B+樹(shù)更加適合在區(qū)間查詢的情況,而且在數(shù)據(jù)庫(kù)中基于范圍的查詢是非常頻繁的,所以通常B+樹(shù)用于數(shù)據(jù)庫(kù)索引。
?
2. 為何相比于B樹(shù),B+樹(shù)在文件系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng)中更具優(yōu)勢(shì)?
①B+樹(shù)的磁盤讀寫代價(jià)更低?
B+樹(shù)的非終端結(jié)點(diǎn)并沒(méi)有指向關(guān)鍵字具體信息的指針,因此其內(nèi)部結(jié)點(diǎn)相對(duì)B樹(shù)更小。如果把同一非終端結(jié)點(diǎn)的所有關(guān)鍵字存放在同一盤塊中,那么盤塊所能容納的關(guān)鍵字?jǐn)?shù)量也越多。一次性讀入內(nèi)存中的需要查找的關(guān)鍵字也就越多。相對(duì)來(lái)說(shuō)I/O讀寫次數(shù)也就降低了。
舉個(gè)例子,假設(shè)磁盤中的一個(gè)盤塊容納16bytes,而一個(gè)關(guān)鍵字2bytes,一個(gè)關(guān)鍵字具體信息指針2bytes。一棵9階B樹(shù)(一個(gè)結(jié)點(diǎn)最多8個(gè)關(guān)鍵字)的非終端結(jié)點(diǎn)需要2個(gè)盤快。而B(niǎo)+樹(shù)非終端結(jié)點(diǎn)只需要1個(gè)盤快。當(dāng)需要把非終端結(jié)點(diǎn)讀入內(nèi)存中的時(shí)候,B樹(shù)就比B+樹(shù)多一次盤塊查找時(shí)間(在磁盤中就是盤片旋轉(zhuǎn)的時(shí)間)。
②B+樹(shù)的查詢效率更加穩(wěn)定?
由于非終端結(jié)點(diǎn)并不是最終指向文件內(nèi)容的結(jié)點(diǎn),而只是葉子結(jié)點(diǎn)中關(guān)鍵字的索引。所以任何關(guān)鍵字的查找必須走一條從根結(jié)點(diǎn)到葉子結(jié)點(diǎn)的路徑。所有關(guān)鍵字查詢的路徑長(zhǎng)度相同,導(dǎo)致每一個(gè)數(shù)據(jù)的查詢效率相當(dāng)。
③B+樹(shù)更有利于對(duì)數(shù)據(jù)庫(kù)的掃描?
B樹(shù)在提高了磁盤IO性能的同時(shí)并沒(méi)有解決元素遍歷的效率低下的問(wèn)題,而B(niǎo)+樹(shù)只需要遍歷葉子節(jié)點(diǎn)就可以解決對(duì)全部關(guān)鍵字信息的掃描,所以對(duì)于數(shù)據(jù)庫(kù)中頻繁使用的范圍查詢,B+樹(shù)有著更高的性能。
?
轉(zhuǎn)載于:https://www.cnblogs.com/xzxl/p/9574448.html
總結(jié)
- 上一篇: 春考计算机组装维修知识点,【校选修】计算
- 下一篇: 深圳最最最牛逼的 IT 公司全在这了!