B+樹和B*樹

B+樹和B*樹

  • 一、B+樹的簡單介紹
  • 二、B+樹的插入過程
  • 三、B*樹的簡單介紹
  • 四、B樹、B+樹、B*樹總結
  • 五、B樹的應用
    • 1、MyISAM索引實現
    • 2、InnoDB索引實現


一、B+樹的簡單介紹

B+樹是B樹的變形,是在B樹基礎上優化的多路平衡搜索樹,B+樹的規則跟B樹基本類似,但是又在B樹的基礎上做了以下幾點改進優化:
分支節點的子樹指針與關鍵字個數相同
分支節點的子樹指針p[i]指向關鍵字值大小在[k[i],k[i+1])區間之間
所有葉子節點增加一個鏈接指針鏈接在一起
所有關鍵字及其映射數據都在葉子節點出現

B+樹的特性:

  1. 所有關鍵字都出現在葉子節點的鏈表中,且鏈表中的節點都是有序的。
  2. 不可能在分支節點中命中。
  3. 分支節點相當于是葉子節點的索引,葉子節點才是存儲數據的數據層。
    在這里插入圖片描述

二、B+樹的插入過程

在這里插入圖片描述

三、B*樹的簡單介紹

B*樹是B+樹的變形,在B+樹的非根和非葉子節點再增加指向兄弟節點的指針。
在這里插入圖片描述

B*樹的分裂
當一個結點滿時,如果它的下一個兄弟結點未滿,那么將一部分數據移到兄弟結點中,再在原結點插入關鍵字,最后修改父結點中兄弟結點的關鍵字(因為兄弟結點的關鍵字范圍改變了);如果兄弟也滿了,則在原結點與兄弟結點之間增加新結點,并各復制1/3的數據到新結點,最后在父結點增加新結點的指針。

四、B樹、B+樹、B*樹總結

B樹:有序數組+平衡多叉樹;
B+樹:有序數組鏈表+平衡多叉樹;
B*樹:一棵更豐滿的,空間利用率更高的B+樹。

五、B樹的應用

1、MyISAM索引實現

在這里插入圖片描述

思考一個問題,我們按照stuID查找快還是name查找更快?
答案肯定是stuID更快,因為這個是主索引,直接使用B+樹本身的搜索能夠搜索到了,而用name查找的話要暴力遍歷B+樹的所有葉子結點去找地址后到表中查找。

如果找不到主建的話,就用一個自增的整數做主建(自增主建)~~

2、InnoDB索引實現

第一個重大區別是InnoDB的數據文件本身就是索引文件。從上文知道,MyISAM索引文件和數據文件是分離的,索引文件僅保存數據記錄的地址。而在InnoDB中,表數據文件本身就是按B+Tree組織的一個索引結構,這棵樹的葉節點data域保存了完整的數據記錄。這個索引的key是數據表的主鍵,因此InnoDB表數據文件本身就是主索引。這種索引叫做聚集索引。因為InnoDB的數據文件本身要按主鍵聚集,所以InnoDB要求表必須有主鍵(MyISAM可以沒有),如果沒有顯式指定,則MySQL系統會自動選擇一個可以唯一標識數據記錄的列作為主鍵,如果不存在這種列,則MySQL自動為InnoDB表生成一個隱含字段作為主鍵,這個字段長度為6個字節,類型為長整形。

第二個與MyISAM索引的不同是InnoDB的輔助索引data域存儲相應記錄主鍵的值而不是地址。換句話說,InnoDB的所有輔助索引都引用主鍵作為data域。

在這里插入圖片描述

這里以英文字符的ASCII碼作為比較準則。聚集索引這種實現方式使得按主鍵的搜索十分高效,但是輔助索引搜索需要檢索兩遍索引:首先檢索輔助索引獲得主鍵,然后用主鍵到主索引中檢索獲得記錄。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18150.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18150.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18150.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

芯片固定uv膠有什么優點?

芯片固定uv膠有什么優點? 芯片固定UV膠具有多種優點,這些優點使得它在半導體封裝和芯片固定等應用中成為理想的選擇。以下是芯片固定UV膠的一些主要優點: 固化速度快:UV膠在紫外線照射下能迅速固化,通常在幾秒到幾十秒…

springcloud-服務拆分與遠程調用

一 微服務 1.1簡單了解 SpringCloud SpringCloud是目前國內使用最廣泛的微服務框架。官網地址:Spring Cloud。 SpringCloud集成了各種微服務功能組件,并基于SpringBoot實現了這些組件的自動裝配,從而提供了良好的開箱即用體驗&#xff1a…

ubuntu24.04LVM擴容問題

目錄 一、 開機前設置:擴展 二、 開機后設置:分區管理 通過gparted管理分區有效做法。 一、 開機前設置:擴展 虛擬機關機。打開虛擬機設置。 掛起狀態是不能擴容的 這里選擇擴容到40G 二、 開機后設置:分區管理 使用gpar…

【Java基礎】IO流(2) —— 字符流

【Java基礎】IO流(1) —— 簡介 【Java基礎】IO流(2) —— 字符流 【Java基礎】IO流(3) —— 字節流 【Java基礎】IO流(4) —— 轉換流、打印流 【Java基礎】IO流(5) —— 序列流、內存流 【Java基礎】IO流(6) —— 隨機訪問文件流、數據流 字符流 文件流 文件輸出流 FileW…

英語學習筆記20——Look at them!

Look at them! 看看他們! 詞匯 Vocabulary big a. 大的(尺寸,年齡,音量……) 搭配:big cheese 大人物    big mouth 大嘴巴(傳話的人)    big talker 吹牛的人 例句&#xf…

【jest - 禁止自動跑test】

最近使用vscode,保存文件時,默認會觸發自動跑test,很煩人,記錄下配置如何配置關閉禁止自動跑jest測試。 打開setting.json,加上下面這句話,即可關閉自動跑 {"jest.runMode": "on-demand&q…

STL源碼刨析:序列式容器之list

目錄 1.前言 2.list的節點定義和結構 3.list的迭代器定義和結構 4.list的定義和結構 5.list的內存管理 6.list的元素操作 前言 在刨析了vector容器的源碼后,list容器相比與vector容器,其元素的插入和刪除較快,不需要對原本容器中的元…

[9] CUDA性能測量與錯誤處理

CUDA性能測量與錯誤處理 討論如何通過CUDA事件來測量它的性能如何通過CUDA代碼進行調試 1.測量CUDA程序的性能 1.1 CUDA事件 CPU端的計時器可能無法給出正確的內核執行時間CUDA事件等于是在你的CUDA應用運行的特定時刻被記錄的時間戳,通過使用CUDA事件API&#…

UVa1466/LA4849 String Phone

UVa1466/LA4849 String Phone 題目鏈接題意分析AC 代碼 題目鏈接 本題是2010年icpc亞洲區域賽大田賽區的G題 題意 平面網格上有n(n≤3000)個單元格,各代表一個重要的建筑物。為了保證建筑物的安全,警察署給每個建筑物派了一名警察…

MFC 用Imm類庫實現輸入法修改輸入模式

1.導入Imm類庫&#xff0c;電腦里都有 #include <Imm.h> #pragma comment(lib, "imm32.lib")2.在想要的地方增加代碼 HIMC himc ImmGetContext(m_hWnd);if (himc ! NULL) {ImmSetOpenStatus(himc, TRUE);ImmNotifyIME(himc, NI_COMPOSITIONSTR, CPS_CANCEL,…

時代終結,微軟宣布淘汰VBScript;Flink漏洞被廣泛利用;Grandoreiro銀行木馬強勢回歸,1500多家銀行成攻擊目標 | 安全周報0524

揭秘SolarMarker惡意軟件&#xff1a;多層次基礎設施讓清除工作陷入困境 Recorded Future的新發現表明&#xff0c;SolarMarker信息竊取惡意軟件背后的持續威脅行為者已經建立了一個多層次的基礎設施&#xff0c;以使執法部門的清除工作變得復雜。 該公司在上周發布的一份報告…

SwiftUI中AppStorage的介紹使用

在Swift中&#xff0c;AppStorage是SwiftUI中引入的一個屬性包裝器&#xff0c;在這之前我們要存儲一些輕量級的數據采用UserDefaults進行存取。而AppStorage用于從UserDefaults中讀取值&#xff0c;當值改變時&#xff0c;它會自動重新調用視圖的body屬性。也就是說&#xff0…

React@16.x(11)ref

目錄 1&#xff0c;介紹1.1&#xff0c;得到的結果 2&#xff0c;參數類型2.1&#xff0c;字符串&#xff08;不再推薦&#xff09;2.2&#xff0c;對象2.3&#xff0c;函數函數調用時機 3&#xff0c;注意點 1&#xff0c;介紹 reference 引用。和 vue 中的 refs 類似&#x…

IEC60870-5-104通信規約 | 報文解析 | 組織報文與解析報文(C++)

文章目錄 一、IEC60870-5-104通信規約1.IEC104的報文結構2.IEC104的報文格式--I/U/S格式2.1 I幀2.2 U幀2.3 S幀 3.應用服務數據單元ASDU 二、IEC60870-5-104規約通信過程報文幀解析三、組織報文與解析報文&#xff08;C&#xff09; 一、IEC60870-5-104通信規約 IEC60870-5-104…

golang 守護進程管理

添加守護進程 vim /etc/systemd/system/xxx.service [Unit] DescriptionGo Socket Service Afternetwork.target[Service] Typesimple ExecStart/data/quwan/quwan_ws WorkingDirectory/data/quwan # 停止前發送信號 ExecStop/bin/kill -SIGTERM $MAINPID # 如果超過20s 進程…

筆記-Python lambda

在學習python的過程中&#xff0c;lambda的語法時常會使人感到困惑&#xff0c;lambda是什么&#xff0c;為什么要使用lambda&#xff0c;是不是必須使用lambda&#xff1f; 下面就上面的問題進行一下解答。 1、lambda是什么&#xff1f; 看個例子&#xff1a; 1 g lambda…

什么是GPT-4o,推薦GPT-4o的獲取使用方法,使用GPT4o模型的最新方法教程(2024年5月16更新)

2024年5月最新GPT-4o模型使用教程和簡介 2024年5月最新GPT-4o模型使用教程和簡介 2024 年 5 月 13 日&#xff0c;openai 發布了最新的模型 GPT4o。 很多同學還不知道如何訪問GPT-4、GPT-4 Turbo和GPT-4o等模型&#xff0c;這篇文章介紹如何在ChatGPT中訪問GPT-4o&#xff0…

milvus索引

Milvus是一個開源的向量數據庫引擎&#xff0c;旨在支持大規模向量相似度搜索和分析。索引在Milvus中扮演著非常重要的角色&#xff0c;它們用于加速向量數據的檢索。下面詳細介紹一下Milvus中的索引&#xff1a; 1. 索引類型 Milvus支持多種索引類型&#xff0c;每種類型都適…

無人機偵察:雷達系統概述

一、雷達基本原理 無人機偵察中的雷達系統主要基于無線電波的傳播和反射原理。雷達發射機產生特定頻率的電磁波&#xff0c;并通過天線以定向波束形式向空間發射。當這些電磁波遇到目標時&#xff0c;部分能量會被反射回來&#xff0c;被雷達接收機捕獲。通過測量發射和接收電…

基于SpringBoot+Vue+Redis+Mybatis的商城購物系統 【系統實現+系統源碼+答辯PPT】

前言 該系統采用SpringBootVue前后端分離開發&#xff0c;前端是一個單獨的項目&#xff0c;后端是一個單獨的項目。 ??技術棧&#xff1a;SpringBootVueMybatisRedisMysql ??開發工具&#xff1a;IDEA、Vscode ??瀏覽器&#xff1a;Chrome ??開發環境&#xff1a;JDK1…