B_樹,B+樹。誰主沉浮?(Mysql優化系列3)

2021-01-08 碼農改變世界

小編上文提及了幾種數據結構都不能很好的成功擔任Mysql索引結構,那麼誰又是Mysql那個心儀已久的白馬王子呢?且看B-樹和B+樹決戰紫晶之巔。

紅黑樹因為本身的樹高問題 , I/O多長效率不高,那麼是否有一種可以再樹每個節點存儲多個元素,就可以解決問題呢,對他就是B-樹。

1、B_樹數據結構

紅黑樹結構如圖:那麼每個節點存最大三個,第四產生轉換

紅黑樹結構圖
B-樹三個元素圖
4個元素圖

當每個大節點超過節點容量時發生轉換。最終結果圖如下

相比較紅黑樹他的高度只有2,查詢速度更快。B-樹因此具有以下幾個特點:

1)、葉節點具有相同的深度,葉節點的指針為空

2)、所有索引元素不重複

3)、節點中的數據索引從左到右遞增排列

看完數據結構,我們看B樹做索引的結構又如何呢,mysql默認索引節點為16KB,當然可以修改大小。

mysql的默認節點大小

B_樹索引算法的結構如下

B樹存儲圖

可以看到每個數字代表一個索引(15,16指針等),後面空格代表葉子節點指針,那麼可以看到每個元素包含索引和元素代表的data數據(data可能是指針地址,也可能是數據),那麼按照1KB一行數據算一個節點就只能存不到16個元素。這樣的話數據的量級別又大打折扣。那麼有沒有更優秀的數據結構呢?

2、B+樹 (成功被寵幸的那一位)

B+樹 一個B_的變種,成功解決樹高,和訪問的結構。

B+樹

B+樹數據結構中每個節點只存索引和下一個節點指針,最後子節點存數據加 索引:

下面以主鍵做例子:比如主鍵使用bigint數據類型是8b,指針佔6b,大小就是14b, 那麼16kb所有存滿一個節點就是16*1024/14= 1170,也就是1170個索引加1170個下一節點指針。以圖三層來算,三層高的樹將存儲:1170*1170*16 達到了兩千萬級別的數據量。那麼為什麼是16呢?因為我們每個data+索引假設為比較大數據的1KB來算的,要是更小的話數據級別將更大。(為何有15,20重複出現,應為右邊索引大於等於左邊)

同時B+樹在最後一層每個節點之間加入指針,做出了雙向的指針。為何這麼設計呢?那就是為了解決前面hash表中的不支持的範圍查找。

表創建

索引的類型

比如我用了>20時自己的節點處理完之後,沒有指針的話就又的從根節點去查找,指針可以根據節點的右邊大於等於左邊,同時頭尾都指針連接, <20也直接使用。

Mysql底層B+樹結構

最終B+樹不出出誰與爭鋒。且看下次他如何笑傲MyISAM索引和InnoDB索引。也看看 為什麼InnoDB表必須有主鍵,並且推薦使用整型的自增主鍵?為什麼非主鍵索引結構葉子節點存儲的是主鍵值?(一致性和節省存儲空間)。

mysql可以每個表都設置不同的存儲引擎:大概分類

一、InnoDB

這是MySQL 5.5或更高版本的默認存儲引擎。它提供了事務安全(ACID兼容)表,支持外鍵引用完整性約束。它支持提交、回滾和緊急恢復功能來保護數據。它還支持行級鎖定。當在多用戶環境中使用時,它的「一致非鎖定讀取」提高了性能。它將數據存儲在集群索引中,從而減少了基於主鍵的查詢的I/O。

二、MyISAM

該存儲引擎管理非事務性表,提供高速存儲和檢索,支持全文搜索。

三、MEMORY

提供內存中的表,以前稱為堆。它在RAM中處理所有數據,以便比在磁碟上存儲數據更快地訪問。用於快速查找引用和其他相同的數據。

四、MERGE

將多個類似的MyISAM表分組為一個表,可以處理非事務性表,默認情況下包括這些表。

五、EXAMPLE

你可以使用此引擎創建表,但不能存儲或獲取數據。這樣做的目的是教開發人員如何編寫新的存儲引擎。

六、ARCHIVE

用於存儲大量數據,不支持索引。

七、CSV

在文本文件中以逗號分隔值格式存儲數據。

八、BLACKHOLE

受要存儲的數據,但始終返回空。

九、FEDERATED

將數據存儲在遠程資料庫中。

相關焦點

  • b樹和b+樹有什麼不同 b樹和b+樹特點區別匯總
    );2、所有結點存儲一個關鍵字;3、非葉子結點的左指針指向小於其關鍵字的子樹,右指針指向大於其關鍵字的子樹;B+樹是B-樹的變體,也是一種多路搜索樹:1、其定義基本與B-樹同,除了:2、非葉子結點的子樹指針與關鍵字個數相同;3、非葉子結點的子樹指針P[i
  • b樹和b+樹的區別是什麼?b+樹數據結構詳細介紹
    首頁 > 問答 > 關鍵詞 > b樹最新資訊 > 正文 b樹和b+樹的區別是什麼?b+樹數據結構詳細介紹 B樹即二叉搜索樹,所有非葉子結點至多擁有兩個兒子(Left和Right,所有結點存儲一個關鍵字,非葉子結點的左指針指向小於其關鍵字的子樹,右指針指向大於其關鍵字的子樹
  • B+樹是什麼意思 B+樹怎麼理解
    首頁 > 問答 > 關鍵詞 > b+樹最新資訊 > 正文 B+樹是什麼意思 B+樹怎麼理解
  • 為什麼 MongoDB 索引選擇B樹,而 Mysql 索引選擇B+樹?
    1、B樹B樹是一種自平衡的搜索樹,形式很簡單:這就是一顆B-樹。針對我們這個問題的最核心的特點如下:(1)多路,非二叉樹(2)每個節點既保存索引,又保存數據(3)搜索時相當於二分查找其他的基本上都是一些常見的數據結構,假定都已經了解了B樹相關的結構。
  • MySQL的索引結構為什麼使用B+樹?
    B樹也稱B-樹(其中-不是減號),是為磁碟等輔存設備設計的多路平衡查找樹,與二叉樹相比,B樹的每個非葉節點可以有多個子樹。因此,當總節點數量相同時,B樹的高度遠遠小於AVL樹和紅黑樹(B樹是一顆「矮胖子」),磁碟IO次數大大減少。
  • mysql 版本號解釋_mysql workbench查詢mysql版本號 - CSDN
    創建索引的原則(重中之重)索引雖好,但也不是無限制的使用,最好符合一下幾個原則1) 最左前綴匹配原則,組合索引非常重要的原則,mysql會一直向右匹配直到遇到範圍查詢(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引
  • 資料庫原理基礎:設計B樹與B+樹的目的以及二者的優劣
    大家好,這裡是IT技術百貨,專注於有價值的IT技術知識分享;今天跟大家分享資料庫中的關鍵數據結構,B樹與B+樹什麼是B樹B樹是一個滿足以下條件的多叉樹,一棵m階B樹滿足如下條件:每一個節點最多有刪除元素22如果刪除之後,兄弟節點個數不大於m/2, 那麼將父親節點移到被刪除元素的節點,然後跟兄弟節點合併;刪除非葉子節點,則用此節點的右子樹第一個節點來填補,同時刪除右子樹的第一個節點B+樹B+樹是對B樹的升級,主要改動如下:
  • 圖解MySQL索引——B-Tree(B+Tree)
    這裡所描述的是索引存儲時保存的形式,2、從應用層次來分:普通索引,唯一索引,複合索引3、根據中數據的物理順序與鍵值的邏輯(索引)順序關係:聚集索引,非聚集索引。平時講的索引類型一般是指在應用層次的劃分。
  • 【HDL系列】乘法器(4)——圖解Wallace樹
    ,被後人稱為Wallace樹。簡單地講即許多個加數求和,每3個加數分為一組,壓縮至2個加數,循環往復。參考往期文章《進位保存加法器原理與設計》以下是加數W1-W39的Wallace結構例子:                加法樹:來自《A Suggestion for a FastMultiplier》在乘法器中,乘法的積為許多個部分和之和。
  • 漫畫:什麼是B+樹?
    在上一篇漫畫中,我們介紹了B-樹的原理和應用,沒看過的小夥伴們可以點擊下面的連結:漫畫:什麼是B-樹?
  • 漫畫:什麼是B-樹?
    二叉查找樹的結構下面來具體介紹一下B-樹(Balance Tree),一個m階的B樹具有如下幾個特徵:1.根結點至少有兩個子女。2.每個中間節點都包含k-1個元素和k個孩子,其中 m/2 <= k <= m3.每一個葉子節點都包含k-1個元素,其中 m/2 <= k <= m4.所有的葉子結點都位於同一層。5.每個節點中的元素從小到大排列,節點當中k-1個元素正好是k個孩子包含的元素的值域分劃。
  • 拜託,別再問我什麼是 B+ 樹了
    InnoDBDEFAULTCHARSET=utf8 COMMENT='用戶信息';一般我們會有如下需求:1、根據用戶 id 查用戶信息select * fromuserwhereid = 123;2、根據區間值來查找用戶信息select * fromuserwhereid > 123andid < 234;3、
  • DTCC:MySQl核心代碼開發經驗揭示
    ::print(FILE* file,  print_query_header(&cache, print_event_info);  my_b_write(&cache, (uchar*) query, q_len);  - my_b_printf(&cache, "%s\n", print_event_info->delimiter
  • MySQL InnoDB 索引原理
    目錄InnoDB表結構B樹與B+樹聚簇索引和二級索引SQL執行順序SQL優化建議一些問題分析參考資料1. InnoDB表結構此小結與索引其實沒有太多的關聯,但是為了便於理解索引的內容,添加此小結作為鋪墊知識。
  • 深度神經決策樹:深度神經網絡和樹模型結合的新模型
    ——深度神經決策樹(Deep Neural Decision Trees, DNDT)。與此不同的是,基於決策樹模型(包括C4.5和CART等)擁有清晰的可解釋性,可以追隨樹的結構回溯出決策產生的因由。 愛丁堡大學的研究人員們基於樹和神經網絡的結構提出了一種新型的模型——深度神經決策樹(DNDT),並探索了樹和網絡之間的相互作用。DNDT是一種具有特殊結構的神經網絡,任意一種配置下的DNDT都對應著決策樹,這使其具有了可解釋性。
  • 從原理到優化,深入淺出資料庫索引 - 計算機java編程
    如:(M=3)相當於一個2–3樹,2–3樹是一個這樣的一棵樹, 它的每個節點要麼有2個孩子和1個數據元素,要麼有3個孩子和2個數據元素,葉子節點沒有孩子,並且有1個或2個數據元素。(3)B-樹的構造過程下面是往B樹中依次插入6 10 4 14 5 11 15 3 2 12 1 7 8 8 6 3 6 21 5 15 15 6 32 23 45 65 7 8 6 5 43、B+TreeB-Tree有許多變種,其中最常見的是B+Tree,MySQL就普遍使用B+Tree實現其索引結構。
  • 大藝樹地板介紹 大藝樹地板產品系列
    大藝樹地板產品系列木飾產品大藝樹愛德戴克系列木飾產品, 採用翡翠、瑪瑙、黑玉、翠玉、綠松石、大理石、漢白玉、南海彩貝、珍珠、金箔、銀箔與各類名貴木種的切片,使用特殊工藝無縫鑲嵌而成,彰顯ArtDeco奢華,絢麗的裝飾風格,是高檔會所
  • MySQL 5.0 新特性教程 存儲過程:第四講
    Sample Problem: Log Of Failures (2)mysql> CREATE TABLE t2s1 INT, PRIMARY KEY (s1))engine=innodb;//mysql> CREATE TABLE t3 (s1 INT, KEY (s1),FOREIGN KEY (s1) REFERENCES
  • MySQL 數據校驗工具-愛可生|mysql|perl|伺服器|node01_網易訂閱
    [root@node01 ~]# sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=10.186.63.82 \  --mysql-port=4380 --mysql-user=gengjin --mysql-password=123 --mysql-db=test \  --table-size
  • 成都生物所發現過樹蛇屬一新種——沃氏過樹蛇
    2018年和2019年,成都生物所李家堂團隊成員在雲南省西雙版納州進行野外考察時,採得過樹蛇屬標本7號。從鱗被、半陰莖等形態學特徵初步判斷,這些標本代表3個物種,包括1個未描述的新種,但文獻記錄西雙版納僅分布有過樹蛇屬1個物種,即過樹蛇D. pictus。由此可見西雙版納的過樹蛇屬物種多樣性此前被低估,需要進行分類釐定。