一、B+樹查詢的穩(wěn)定性為什么重要
首先最大的優(yōu)勢還是磁盤IO和范圍,從我個人的看法看,穩(wěn)定性(每次查詢必須從根走到葉子節(jié)點)這意味行為可預估,這在引擎內(nèi)部建立執(zhí)行計劃時會方便控制變量。
為了實現(xiàn)動態(tài)多層索引,通常采用 B-樹 和 B+樹。但是,用于索引的 B-樹 存在缺陷,它的所有中間結點均存儲的是數(shù)據(jù)指針(指向包含鍵值的磁盤文件塊的指針),與該鍵值一起存儲在B-樹的結點中。這就會導致可以存儲在 B-樹中的結點目數(shù)極大地減少了,從而增加 B-樹的層數(shù),進而增加了記錄的搜索時間。
B+樹通過僅在樹的葉子結點中存儲數(shù)據(jù)指針而消除了上述缺陷。因此,B+樹的葉結點的結構與 B-樹的內(nèi)部結點的結構完全不同。在這里應該注意,由于數(shù)據(jù)指針僅存在于葉子結點中,因此葉子結點必須將所有鍵值及其對應的數(shù)據(jù)指針存儲到磁盤文件塊以便訪問。此外,葉子結點被鏈接磁盤的某個位置,以提供對記錄的有序訪問。因此,葉子結點形成名列前茅級索引,而內(nèi)部結點形成多層索引的其他層。葉子結點的某些關鍵字 key 也出現(xiàn)在內(nèi)部結點中,充當控制搜索記錄的媒介。
與 B-樹不同,B+樹中的結點存在兩個階(order):對于階 “a” 和 “ b”,一個用于內(nèi)部結點,另一個用于外部(或葉)結點。
延伸閱讀:
二、B+樹的優(yōu)點
同為h層的 B-樹和 B+樹,B+樹可以存儲更多的結點元素,更加 ”矮胖“。這也是 B+樹最大的優(yōu)勢坐在,極大地改善了 B-樹的查找效率。對于同樣多的記錄,B+樹的高度會更矮,并且指針的出現(xiàn)可以幫助 B+樹快速訪問磁盤記錄且效率非常高。總之,就是 B+樹比 B-樹更加好,B+樹的磁盤 I / O 會更少,相比于 B-樹的中序遍歷,B+樹只需要像遍歷單鏈表一樣掃描一遍葉子結點。