索引的底層數據結構、B+樹的結構、為什么InnoDB使用B+樹而不是B樹呢

索引的底層數據結構

MySQL中常用的是Hash索引和B+樹索引

Hash索引:基于哈希表實現的,查找速度非常快,但是由于哈希表的特性,不支持范圍查找和排序,在MySQL中支持的哈希索引是自適應的,不能手動創建

B+樹的結構

????????B+樹 是一種高效的多路平衡樹,適合磁盤存儲和范圍查詢。它的結構特點包括數據集中在葉子節點、葉子節點連接成鏈表、內部節點僅存儲鍵值和指針。在數據庫和文件系統中,B+樹 被廣泛應用于索引和數據存儲,具有查詢性能穩定、適合高并發等優勢。

?如圖:B+樹具有以下特點:

只有葉子結點才存放數據,中間節點都是用來存放目錄項作為索引

非葉子節點分為不同層次,通過分層來降低每一層的搜索量

B+樹的搜索策略:

從根節點開始,通過二分法快速定位到符合頁內范圍包含查詢值的頁,在中間結點中繼續根據二分法來尋找符合頁內范圍復合查詢值的頁,接著在葉子節點中通過槽查找記錄使用二分法快速定位要查詢的記錄在哪個槽,找到槽后再遍歷槽中所有的記錄,找到尋找的分組。

為什么InnoDB使用B+樹而不是B樹呢?

B-Tree:

  • 每個節點既存儲數據也存儲子節點的指針
  • 數據分布在所有的節點中,包括內部節點和葉子節點
  • 查找時可能會直接在內部節點中就能找到數據不需要遍歷到葉子節點

B+Tree:

  • 只有葉子結點存儲數據,內部節點僅存儲鍵值和子節點的指針
  • 所有葉子節點通過指針連接成一個有序鏈表
  • 查找時必須遍歷到葉子節點才能獲取數據?

B+Tree的優勢:

更適合磁盤I/O:

  • 因為B+樹的內部節點不存儲數據只存儲鍵值和指針,所以每個節點可以存儲更多的鍵值,從而降低樹的高度,樹的高度越低磁盤I/O次數越少,查詢性能越高(索引數據量很大,一定是存儲在磁盤中的,每訪問一個節點就會進行一次磁盤IO操作,所以樹的高度越低,一次查詢的期望IO次數就越少,效率就越高)
  • B+樹的葉子節點通過指針連接成鏈表,更適合范圍查詢如(BETWEEN,>,<等操作),而樹的范圍查詢需要在不同層級的節點之間跳轉,效率較低?

更適合數據庫場景:

  • 數據集中在葉子節點上,查詢時都需要遍歷到葉子節點,這使得查詢性能更穩定。B樹的數據可能分布在內部節點和葉子結點,查詢性能不穩定?
  • 數據庫查詢中經常需要使用范圍查詢,B+樹的葉子節點鏈表結構非常適合這種場景,而B樹需要多次遍歷內部節點

更適合并發控制:

  • 在并發場景下,B+樹的葉子節點鏈表可以更容易地支持范圍查詢和順序訪問
  • 而B樹的結構在并發訪問時可能需要更多的鎖機制(數據分布在內部節點和葉子節點。節點分裂與合并涉及多個節點。鎖的粒度較大,容易導致鎖沖突)

B+樹在InnoDB中的具體應用:

主鍵索引(聚簇索引):

? ? ? ? InnoDB使用B+樹實現主鍵索引,葉子節點存儲完整的數據行

? ? ? ? 這種設計是的通過主鍵查詢數據時可以直接獲取數據,不需要回表

二級索引(非聚簇索引):?

? ? ? ? InnoDB的二級索引也是B+樹,但是葉子節點存儲的是主鍵值,通過二級索引查詢時,先獲取主鍵值再通過主鍵索引查找數據(回表)

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

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

相關文章

RK3568中使用QT opencv(顯示基礎圖像)

文章目錄 一、查看對應的開發環境是否有opencv的庫二、QT使用opencv一、查看對應的開發環境是否有opencv的庫 在開發板中的/usr/lib目錄下查看是否有opencv的庫: 這里使用的是正點原子的ubuntu虛擬機,在他的虛擬機里面已經安裝好了opencv的庫。 二、QT使用opencv 在QT pr…

29.Word:公司本財年的年度報告【13】

目錄 NO1.2.3.4 NO5.6.7? NO8.9.10? NO1.2.3.4 另存為F12&#xff1a;考生文件夾&#xff1a;Word.docx選中綠色標記的標題文本→樣式對話框→單擊右鍵→點擊樣式對話框→單擊右鍵→修改→所有腳本→顏色/字體/名稱→邊框&#xff1a;0.5磅、黑色、單線條&#xff1a;點…

【數據分析】案例03:當當網近30日熱銷圖書的數據采集與可視化分析(scrapy+openpyxl+matplotlib)

當當網近30日熱銷圖書的數據采集與可視化分析(scrapy+openpyxl+matplotlib) 當當網近30日熱銷書籍官網寫在前面 實驗目的:實現當當網近30日熱銷圖書的數據采集與可視化分析。 電腦系統:Windows 使用軟件:Visual Studio Code Python版本:python 3.12.4 技術需求:scrapy、…

數據庫對象

數據庫對象 數據庫對象是構成數據庫結構的基本單位&#xff0c;它們定義了數據庫存儲的數據類型、數據的組織方式以及數據之間的關系。在數據庫中&#xff0c;對象可以包括表&#xff0c;視圖&#xff0c;索引&#xff0c;觸發器&#xff0c;存儲過程&#xff0c;函數等多種類…

Super AGI 2025 ,人形機器人,芯片半導體,價值+量化投資最佳實踐

Super AGI 2025&#xff1a;人形機器人、芯片半導體與價值量化投資最佳實踐 關鍵詞&#xff1a;Super AGI、人形機器人、芯片半導體、價值投資、量化投資、技術趨勢、投資策略 摘要&#xff1a;本文探討了Super AGI、人形機器人和芯片半導體領域的發展前景&#xff0c;并結合價…

AI學習指南Ollama篇-使用Ollama構建自己的私有化知識庫

一、引言 (一)背景介紹 隨著企業對數據隱私和效率的重視,私有化知識庫的需求日益增長。私有化知識庫不僅可以保護企業數據的安全性,還能提供高效的知識管理和問答系統,提升企業內部的工作效率和創新能力。 (二)Ollama和AnythingLLM的結合 Ollama和AnythingLLM的結合…

省級-新質生產力數據(2010-2022年)-社科數據

省級-新質生產力數據&#xff08;2010-2022年&#xff09;-社科數據https://download.csdn.net/download/paofuluolijiang/90028612 https://download.csdn.net/download/paofuluolijiang/90028612 新質生產力是指在現代科技和經濟社會發展的推動下&#xff0c;由新的生產要素…

用一個例子詳細說明python單例模式

單例模式是一種設計模式&#xff0c;它確保一個類只有一個實例&#xff0c;并提供一個全局訪問點來訪問該實例。這在需要控制資源&#xff08;如數據庫連接、文件系統等&#xff09;的訪問時非常有用。 下面是一個使用Python實現單例模式的例子&#xff1a; class Singleton:…

【PyTorch】7.自動微分模塊:開啟神經網絡 “進化之門” 的魔法鑰匙

目錄 1. 梯度基本計算 2. 控制梯度計算 3. 梯度計算注意 4. 小節 個人主頁&#xff1a;Icomi 專欄地址&#xff1a;PyTorch入門 在深度學習蓬勃發展的當下&#xff0c;PyTorch 是不可或缺的工具。它作為強大的深度學習框架&#xff0c;為構建和訓練神經網絡提供了高效且靈活…

【數據分析】案例04:豆瓣電影Top250的數據分析與Web網頁可視化(numpy+pandas+matplotlib+flask)

豆瓣電影Top250的數據分析與Web網頁可視化(numpy+pandas+matplotlib+flask) 豆瓣電影Top250官網:https://movie.douban.com/top250寫在前面 實驗目的:實現豆瓣電影Top250詳情的數據分析與Web網頁可視化。電腦系統:Windows使用軟件:PyCharm、NavicatPython版本:Python 3.…

Ubuntu20.04 深度學習環境配置(持續完善)

文章目錄 常用的一些命令安裝 Anaconda創建conda虛擬環境查看虛擬環境大小 安裝顯卡驅動安裝CUDA安裝cuDNN官方倉庫安裝 cuDNN安裝 cuDNN 庫驗證 cuDNN 安裝確認 CUDA 和 cuDNN 是否匹配&#xff1a; TensorRT下載 TensorRT安裝 TensorRT 本地倉庫配置 GPG 簽名密鑰安裝 Tensor…

元宇宙與Facebook:社交互動的未來方向

隨著技術的飛速發展&#xff0c;元宇宙逐漸成為全球科技領域關注的焦點。作為一種集沉浸式體驗、虛擬空間和數字社交互動為一體的新型平臺&#xff0c;元宇宙正在重新定義人類的社交方式。而在這一變革中&#xff0c;Facebook&#xff08;現改名為Meta&#xff09;作為全球領先…

【趙渝強老師】K8s中Pod探針的ExecAction

在K8s集群中&#xff0c;當Pod處于運行狀態時&#xff0c;kubelet通過使用探針&#xff08;Probe&#xff09;對容器的健康狀態執行檢查和診斷。K8s支持三種不同類型的探針&#xff0c;分別是&#xff1a;livenessProbe&#xff08;存活探針&#xff09;、readinessProbe&#…

python 語音識別

目錄 一、語音識別 二、代碼實踐 2.1 使用vosk三方庫 2.2 使用SpeechRecognition 2.3 使用Whisper 一、語音識別 今天識別了別人做的這個app,覺得雖然是個日記app 但是用來學英語也挺好的,能進行語音識別,然后矯正語法,自己說的時候 ,實在不知道怎么說可以先亂說,然…

Node.js——body-parser、防盜鏈、路由模塊化、express-generator應用生成器

個人簡介 &#x1f440;個人主頁&#xff1a; 前端雜貨鋪 &#x1f64b;?♂?學習方向&#xff1a; 主攻前端方向&#xff0c;正逐漸往全干發展 &#x1f4c3;個人狀態&#xff1a; 研發工程師&#xff0c;現效力于中國工業軟件事業 &#x1f680;人生格言&#xff1a; 積跬步…

PPT演示設置:插入音頻同步切換播放時長計算

PPT中插入音頻&同步切換&放時長計算 一、 插入音頻及音頻設置二、設置頁面切換和音頻同步三、播放時長計算 一、 插入音頻及音頻設置 1.插入音頻&#xff1a;點擊菜單欄插入-音頻-選擇PC上的音頻&#xff08;已存在的音頻&#xff09;或者錄制音頻&#xff08;現場錄制…

【llm對話系統】大模型 Llama 源碼分析之 LoRA 微調

1. 引言 微調 (Fine-tuning) 是將預訓練大模型 (LLM) 應用于下游任務的常用方法。然而&#xff0c;直接微調大模型的所有參數通常需要大量的計算資源和內存。LoRA (Low-Rank Adaptation) 是一種高效的微調方法&#xff0c;它通過引入少量可訓練參數&#xff0c;固定預訓練模型…

Linux 內核學習(5) --- Linux 內核底半部機制

目錄 中斷底半部軟中斷tasklet工作隊列使用工作隊列 中斷底半部 當產生一個中斷時&#xff0c;會進入中斷處理程序&#xff0c;但中斷處理程序必須快速、異步、簡單的對硬件做出迅速響應并完成那些時間要求很嚴格的操作&#xff0c;因此&#xff0c;對于那些其他的、對時間要求…

3D圖形學與可視化大屏:什么是材質屬性,有什么作用?

一、顏色屬性 漫反射顏色 漫反射顏色決定了物體表面對入射光進行漫反射后的顏色。當光線照射到物體表面時&#xff0c;一部分光被均勻地向各個方向散射&#xff0c;形成漫反射。漫反射顏色的選擇會直接影響物體在光照下的外觀。例如&#xff0c;一個紅色的漫反射顏色會使物體在…

Jenkins未在第一次登錄后設置用戶名,第二次登錄不進去怎么辦?

Jenkins在第一次進行登錄的時候&#xff0c;只需要輸入Jenkins\secrets\initialAdminPassword中的密碼&#xff0c;登錄成功后&#xff0c;本次我們沒有修改密碼&#xff0c;就會導致后面第二次登錄&#xff0c;Jenkins需要進行用戶名和密碼的驗證&#xff0c;但是我們根本就沒…