資料庫原理基礎:設計B樹與B+樹的目的以及二者的優劣

2020-11-28 IT技術百貨

大家好,這裡是IT技術百貨,專注於有價值的IT技術知識分享;今天跟大家分享資料庫中的關鍵數據結構,B樹與B+樹

什麼是B樹

B樹是一個滿足以下條件的多叉樹,一棵m階B樹滿足如下條件:

每一個節點最多有m個子節點除去葉子節點和根結點之外,其他節點至少有m/2個節點包含t個子節點的節點包含有t-1個key根結點如果不是葉子節點,那麼至少要包含2個子結點每個節點的關鍵字從小到大排列,每一個關鍵字對應的左子樹都小於這個關鍵字,右子樹都大於這個關鍵字所有葉子節點都位於同一層以上限定規則略顯複雜,讀起來可能也比較繞口,簡言之就是限制每個節點的子結點個數,保證有序性以及每一個葉節點深度相同的三個特性;

B樹是一種有序的數據結構,可以在log時間複雜度下完成插入、查找、刪除操作;

插入操作:

自底部插入,如果滿足節點個數的限制,則直接插入;如果不滿足,那麼一定是超出了節點個數限制,則進行調整;

調整的方式是將中間的元素插入到父節點,本身的節點分裂成兩個節點(如果父節點個數也超出了繼續按照這個規則調整);

舉例:如下圖,插入「39」這個節點,那麼第二層最左邊的節點個數超出了,因此將中間的節點升為父節點,本身分裂為兩個節點,最終變為第二個圖的樣子。

刪除操作

刪除操作略微複雜,但不同情形下都是有成熟的規則的,只要按照規則來就可以;(類似於擰魔方)

刪除葉節點,並且刪除之後 節點的key的個數滿足多叉樹要求,那麼直接刪除

case 1

刪除葉節點,並且刪除後不滿足要求,則首先看前面的兄弟節點是否有>m/2個節點,如果>m/2個節點,那麼就「借」一個,但這裡並不是直接去借兄弟節點元素,是借父親的元素,然後用兄弟節點元素來填補借的父元素。

刪除元素22

如果刪除之後,兄弟節點個數不大於m/2, 那麼將父親節點移到被刪除元素的節點,然後跟兄弟節點合併;刪除非葉子節點,則用此節點的右子樹第一個節點來填補,同時刪除右子樹的第一個節點

B+樹

B+樹是對B樹的升級,主要改動如下:

內部節點只存儲索引,不存儲數據;(這裡類比聚簇索引和非聚簇索引就很明確了),對於B樹來說,索引和數據會放在磁碟的同一個扇區中(或者是文件系統的同一個頁中),而B+樹不會;

存儲劃分

page=3的頁中只存在索引,而數據存在其他頁中;

每一個葉子節點,都存有相鄰葉節點的指針(雙向鍊表)採用雙向鍊表的原因是為了方便處理"小於"的條件查詢。

對比

B樹和B+樹都是多路查找樹,目的都是為了解決多次訪問磁碟,IO耗時太長的問題;

如果採用二叉樹,雖然查找的時間複雜度沒變,但是由於每一個節點可能在不同的頁上,因此訪問磁碟的次數增多。

B+樹進一步優化了磁碟訪問次數,將索引和數據分開存儲,因此每一個頁中存儲的索引更多。

B+樹的葉節點增加了指針連結,可以查詢效率更高;

但同樣的,B+樹對查詢的優化操作會降低了一定寫入性能。

感謝瀏覽閱讀,如果覺得內容有價值歡迎點讚,轉發;喜歡請關注「IT技術百貨」

相關焦點

  • B+樹是什麼意思 B+樹怎麼理解
    首頁 > 問答 > 關鍵詞 > b+樹最新資訊 > 正文 B+樹是什麼意思 B+樹怎麼理解
  • b樹和b+樹有什麼不同 b樹和b+樹特點區別匯總
    首頁 > 問答 > 關鍵詞 > b樹最新資訊 > 正文 b樹和b+樹有什麼不同 b樹和b+樹特點區別匯總
  • b樹和b+樹的區別是什麼?b+樹數據結構詳細介紹
    首頁 > 問答 > 關鍵詞 > b樹最新資訊 > 正文 b樹和b+樹的區別是什麼?b+樹數據結構詳細介紹 B樹即二叉搜索樹,所有非葉子結點至多擁有兩個兒子(Left和Right,所有結點存儲一個關鍵字,非葉子結點的左指針指向小於其關鍵字的子樹,右指針指向大於其關鍵字的子樹
  • MySQL的索引結構為什麼使用B+樹?
    本文將從最普通的二叉查找樹開始,逐步說明各種樹解決的問題以及面臨的新問題,從而說明MySQL為什麼選擇B+樹作為索引結構。二叉查找樹(BST,Binary Search Tree),也叫二叉排序樹,在二叉樹的基礎上需要滿足:任意節點的左子樹上所有節點值不大於根節點的值,任意節點的右子樹上所有節點值不小於根節點的值。如下是一顆BST(圖片來源)。
  • B_樹,B+樹。誰主沉浮?(Mysql優化系列3)
    且看B-樹和B+樹決戰紫晶之巔。紅黑樹因為本身的樹高問題 , I/O多長效率不高,那麼是否有一種可以再樹每個節點存儲多個元素,就可以解決問題呢,對他就是B-樹。1、B_樹數據結構紅黑樹結構如圖:那麼每個節點存最大三個,第四產生轉換
  • 漫畫:什麼是B+樹?
    在上一篇漫畫中,我們介紹了B-樹的原理和應用,沒看過的小夥伴們可以點擊下面的連結:漫畫:什麼是B-樹?
  • 為什麼 MongoDB 索引選擇B樹,而 Mysql 索引選擇B+樹?
    1、B樹B樹是一種自平衡的搜索樹,形式很簡單:這就是一顆B-樹。針對我們這個問題的最核心的特點如下:(1)多路,非二叉樹(2)每個節點既保存索引,又保存數據(3)搜索時相當於二分查找其他的基本上都是一些常見的數據結構,假定都已經了解了B樹相關的結構。
  • 你知道「(a+b)平方=a方+2ab+b方」,以及「勾股定理」的原理嗎?
    相信只要是上過初中的同學,對於「(a+b)平方=a平方+2ab+b平方」這個公式肯定都很熟悉(不熟悉的請自行請教自己的體育老師),但是,對於它的原理可能有人會不知道!所以,今天給大家介紹下這個公式究竟是怎麼來的,同時,還會解釋下我們非常熟悉的勾股定理。以及這裡面蘊含的思想又是什麼?
  • 【HDL系列】乘法器(4)——圖解Wallace樹
    ,被後人稱為Wallace樹。參考往期文章《進位保存加法器原理與設計》以下是加數W1-W39的Wallace結構例子:                加法樹:來自《A Suggestion for a FastMultiplier》在乘法器中,乘法的積為許多個部分和之和。Wallace結構可以加快乘法器的計算速度。
  • 漫畫:什麼是B-樹?
    二叉查找樹的結構下面來具體介紹一下B-樹(Balance Tree),一個m階的B樹具有如下幾個特徵:1.根結點至少有兩個子女。
  • 從原理到優化,深入淺出資料庫索引 - 計算機java編程
    資料庫查詢是資料庫的最主要功能之一,我們都希望查詢數據的速度能儘可能的快,因此資料庫系統的設計者會從查詢算法的角度進行優化,這篇文章對索引做一個系統的梳理,希望對大家有幫助。一、MySQL有哪些索引類型索引的分類可以從多個角度進行,下面分別從數據結構,物理存儲和業務邏輯三個維度進行劃分。
  • 拜託,別再問我什麼是 B+ 樹了
    B+樹!那麼它相對於一般的鍊表,哈希等有何不同,為何多數存儲引擎都選擇使用它呢,今天我就來揭開 B+ 樹的面紗,相信看了此文,B+ 樹不再神秘,對你理解以下高頻面試題會大有幫助!為啥索引常用 B+ 樹作為底層的數據結構除了 B+ 樹索引,你還知道什麼索引為啥推薦自增 id 作為主鍵,自建主鍵不行嗎什麼是頁分裂,頁合併怎麼根據索引查找行記錄本文將會從以下幾個方面來講解 B+ 樹定義問題幾種常見的數據結構對比頁分裂與頁合併定義問題要知道索引底層為啥使用 B+ 樹,得看它解決了什麼問題,我們可以想想,日常我們用到的比較多的
  • 零基礎鋼筆畫教程:分步驟講解樹的基本結構和畫法,簡單易學
    通常來說,建築點景主要包括樹、人物、車輛和小品等。樹樹是建築點景中最重要的內容,屬於點景類的面或線要素,幾乎每張建築手繪圖中都存在樹。同時,樹也是最難畫的一項內容,由於樹本身形態多變,且結構豐富,想要將其表現得自然、和諧,則必須認真學習其結構,並輔以大量練習才能做到。
  • 【乾貨】事故樹分析方法(FTA)最詳細解析分享
    事故樹是一種表示導致事故的各種原因之間的因果和邏輯關係圖,其分析可以是定性的,也可以是定量的.其理論基礎是布爾代數,它不但可以給我們提供解決問題的方法,更可給我們提供一條解決系統安全問題的思路。事故樹的定性分析所謂定性分析,主要是針對事故樹分析其結構,求出事故樹的最小割集和最小徑集,從中得到基本事件與頂上事件的邏輯關係,即事故樹的結構函數.為達到此目的,必須經過以下幾個步驟,即化簡事故樹,求最小割集和最小徑集.
  • 數字下變頻器GC1012B原理及配置方法
    本文從gc1012b的結構特點和內部功能框圖出發,分析其工作原理,並介紹gc1012b幾個主要寄存器的配置方法,從而實現對頻率、濾波模式、增益大小等參數的設置,最後給出了一個具體配置實例作為參考。 2 gc1012b配置方法 gc1012b採用120引腳qfp封裝,3.3v電源供電,其內部結構和工作原理框圖如圖1所示,從圖中可以看出,gc1012b主要由控制接口電路、數字振蕩器、混頻器、可編程低通濾波器、增益調節電路、輸出格式化電路和診斷電路等組成。
  • 資料庫設計基礎:資料庫物理設計工作過程和設計步驟
    1、數據流物理設計的工作過程在資料庫的物理結構中,數據的基本單位是數據記錄,記錄以文件的形式進行存儲,一條存儲記錄對應關係模式中的一條邏輯記錄,並且文件當中還需要記錄存儲記錄的結構信息,比如欄位長度、數據類型、欄位描述等信息。
  • 成都生物所發現過樹蛇屬一新種——沃氏過樹蛇
    該研究採用線粒體cyt b和16s rRNA片段(共1562 bp)構建了過樹蛇屬10餘個物種的系統發育關係,結合形態學數據,該研究認為:  (1)雲南西雙版納的過樹蛇屬2個已知物種為過樹蛇和銀山過樹蛇,但後者在形態特徵上與此前未記錄於我國的藍綠過樹蛇Dendrelaphis cyanochloris (Wall, 1921) 很難區分,遺傳距離也很近,因此銀山過樹蛇很可能是藍綠過樹蛇的次訂同物異名
  • 2020 年資料庫高頻面試題|原力計劃
    4、資料庫三大範式是什麼?第一範式:每個列都不可以再拆分。第二範式:在第一範式的基礎上,非主鍵列完全依賴於主鍵,而不能是依賴於主鍵的一部分。第三範式:在第二範式的基礎上,非主鍵列只依賴於主鍵,不依賴於其他非主鍵。在設計資料庫結構的時候,要儘量遵守三範式,如果不遵守,必須有足夠的理由。比如性能。
  • 從決策樹到隨機森林:樹型算法的原理與實現
    基於樹(Tree based)的學習算法在數據科學競賽中是相當常見的。這些算法給預測模型賦予了準確性、穩定性以及易解釋性。和線性模型不同,它們對非線性關係也能進行很好的映射。常見的基於樹的模型有:決策樹(decision trees)、隨機森林(random forest)和提升樹(boosted trees)。
  • 健身吃維生素b
    維生素b族的作用及功能: 1、預防中風 維生素b能夠幫助預防中風。因為維生素b能夠積極參與協助人體內的活性酶分解,幫助抑制人身體內導致中風的物質—高半胱氨酸的產生,從而幫助預防中風。但是要注意的是我們並不能通過大量補充維生素b來治療中風,只能幫助提前預防,減小中風的風險。