欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解讀MySQL中一個(gè)B+樹(shù)能存儲(chǔ)多少數(shù)據(jù)

 更新時(shí)間:2023年02月14日 16:00:24   作者:碳基生物與硅  
這篇文章主要介紹了解讀MySQL中一個(gè)B+樹(shù)能存儲(chǔ)多少數(shù)據(jù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

MySQL中一個(gè)B+樹(shù)能存儲(chǔ)多少數(shù)據(jù)

MySQL聚簇索引的存儲(chǔ)結(jié)構(gòu)

MySQL中InnoDB頁(yè)的大小默認(rèn)是16k。也可以自己進(jìn)行設(shè)置。(計(jì)算機(jī)在存儲(chǔ)數(shù)據(jù)的時(shí)候,最小存儲(chǔ)單元是扇區(qū),一個(gè)扇區(qū)的大小是 512 字節(jié),而文件系統(tǒng)(例如 XFS/EXT4)最小單元是塊,一個(gè)塊的大小是 4KB。

InnoDB 引擎存儲(chǔ)數(shù)據(jù)的時(shí)候,是以頁(yè)為單位的,每個(gè)數(shù)據(jù)頁(yè)的大小默認(rèn)是 16KB,即四個(gè)塊。)

在B+樹(shù)中,一個(gè)結(jié)點(diǎn)就是一頁(yè)。非葉子結(jié)點(diǎn)由主鍵值和一個(gè)指向下一層的地址的指針組成的組合組成。葉子結(jié)點(diǎn)中由一組鍵值對(duì)和一個(gè)指向該層下一頁(yè)的指針組成,鍵值對(duì)存儲(chǔ)的主鍵值和數(shù)據(jù)。

由存儲(chǔ)結(jié)構(gòu),可以大概計(jì)算出一個(gè)B+樹(shù)能存儲(chǔ)的數(shù)據(jù)數(shù)量。

指針在InnoDB中為6字節(jié),設(shè)主鍵的類型是bigint,占8字節(jié)。一組就是14字節(jié)。

計(jì)算出一個(gè)非葉子結(jié)點(diǎn)可以存儲(chǔ)16 * 1024 / 14 = 1170個(gè)索引指針。

假設(shè)一條數(shù)據(jù)的大小是1KB,那么一個(gè)葉子結(jié)點(diǎn)可以存儲(chǔ)16條數(shù)據(jù)。

得出兩層B+樹(shù)可以存儲(chǔ)1170 x 16 = 18720 條數(shù)據(jù)。

三層B+樹(shù)可以存儲(chǔ)1170 x 1170 x 16 = 21902400條數(shù)據(jù)。

MySQL中B樹(shù)與B+樹(shù)的區(qū)別

B樹(shù)

B樹(shù)和B+樹(shù)都是應(yīng)用在數(shù)據(jù)庫(kù)索引上,可以認(rèn)為是m叉的多路平衡查找樹(shù),但是理論上講,二叉樹(shù)的查找速度和比較次數(shù)都更小,為什么不用二叉樹(shù)呢?

這是因?yàn)槲覀円紤]磁盤(pán)IO的影響,它相對(duì)于內(nèi)存來(lái)說(shuō)是很慢的,數(shù)據(jù)庫(kù)索引是存儲(chǔ)在磁盤(pán)上的,當(dāng)數(shù)據(jù)量很大時(shí),就不能把整個(gè)索引全部加載到內(nèi)存中,只能逐一加載每一個(gè)磁盤(pán)頁(yè)(對(duì)應(yīng)索引樹(shù)的節(jié)點(diǎn))。

所以我們要減少IO的次數(shù),對(duì)于樹(shù)來(lái)說(shuō),IO次數(shù)就是樹(shù)的高度,而“矮胖”就是B樹(shù)的特征之一。

B樹(shù)的特征:

  • 關(guān)鍵字集合分布在整顆樹(shù)中;
  • 任何一個(gè)關(guān)鍵字出現(xiàn)且只出現(xiàn)在一個(gè)結(jié)點(diǎn)中;
  • 搜索有可能在非葉子結(jié)點(diǎn)結(jié)束;
  • 其搜索性能等價(jià)于在關(guān)鍵字全集內(nèi)做一次二分查找;

1

B+樹(shù)

B+樹(shù)是B樹(shù)的變體,是一種查詢性能更好的B樹(shù)。B+樹(shù)是一種平衡查找樹(shù)。在B+樹(shù)中,所有記錄節(jié)點(diǎn)都是按鍵值的大小順序存放在同一層的葉節(jié)點(diǎn)中,各葉結(jié)點(diǎn)指針進(jìn)行連接。

B+樹(shù)的特征:

  • 有n棵子樹(shù)的非葉子結(jié)點(diǎn)中含有n個(gè)關(guān)鍵字(b樹(shù)是n-1個(gè)),這些關(guān)鍵字不保存數(shù)據(jù),只用來(lái)索引,所有數(shù)據(jù)都保存在葉子節(jié)點(diǎn)(b樹(shù)是每個(gè)關(guān)鍵字都保存數(shù)據(jù))。
  • 所有的葉子結(jié)點(diǎn)中包含了全部關(guān)鍵字的信息,及指向含這些關(guān)鍵字記錄的指針,且葉子結(jié)點(diǎn)本身依關(guān)鍵字的大小自小而大順序鏈接。
  • 所有的非葉子結(jié)點(diǎn)可以看成是索引部分,結(jié)點(diǎn)中僅含其子樹(shù)中的最大(或最小)關(guān)鍵字。
  • 通常在b+樹(shù)上有兩個(gè)頭指針,一個(gè)指向根結(jié)點(diǎn),一個(gè)指向關(guān)鍵字最小的葉子結(jié)點(diǎn)。
  • 同一個(gè)數(shù)字會(huì)在不同節(jié)點(diǎn)中重復(fù)出現(xiàn),根節(jié)點(diǎn)的最大元素就是b+樹(shù)的最大元素。

6

B樹(shù)與B+樹(shù)的區(qū)別

  • B樹(shù)的中間節(jié)點(diǎn)保存節(jié)點(diǎn)和數(shù)據(jù),B+樹(shù)的中間節(jié)點(diǎn)不保存數(shù)據(jù),數(shù)據(jù)保存在葉子節(jié)點(diǎn)中;所以磁盤(pán)頁(yè)能容納更多的節(jié)點(diǎn)元素,更“矮胖”;
  • B樹(shù)的查找要只要匹配到元素,就不用管在什么位置,B+樹(shù)查找必須匹配到葉子節(jié)點(diǎn),所以B+樹(shù)查找更穩(wěn)定;
  • 對(duì)于范圍查找到說(shuō),B樹(shù)要從頭到尾查找,而B(niǎo)+樹(shù)只需要在一定的范圍內(nèi)的葉子節(jié)點(diǎn)中查找就可以;
  • B+樹(shù)的葉子節(jié)點(diǎn)通過(guò)指針連接,從左到右順序排列;
  • B+樹(shù)的非葉子節(jié)點(diǎn)與葉子節(jié)點(diǎn)冗余;

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在SQL中修改數(shù)據(jù)的基礎(chǔ)語(yǔ)句

    在SQL中修改數(shù)據(jù)的基礎(chǔ)語(yǔ)句

    修改數(shù)據(jù)SQL中,可以使用UPDATE語(yǔ)句來(lái)修改、更新一個(gè)或多個(gè)表的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于在SQL中修改數(shù)據(jù)的基礎(chǔ)語(yǔ)句,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • mysql請(qǐng)求阻塞問(wèn)題解析

    mysql請(qǐng)求阻塞問(wèn)題解析

    這篇文章主要介紹了mysql請(qǐng)求阻塞問(wèn)題解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-10-10
  • MySQL數(shù)據(jù)操作-DML語(yǔ)句的使用

    MySQL數(shù)據(jù)操作-DML語(yǔ)句的使用

    這篇文章主要介紹了MySQL數(shù)據(jù)操作-DML語(yǔ)句的使用,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-11-11
  • 超詳細(xì)匯總21個(gè)值得收藏的mysql優(yōu)化實(shí)踐

    超詳細(xì)匯總21個(gè)值得收藏的mysql優(yōu)化實(shí)踐

    這篇文章主要分享的是超詳細(xì)匯總21個(gè)值得收藏的mysql優(yōu)化實(shí)踐,對(duì)正在學(xué)習(xí)的同學(xué)有一定的參考價(jià)值,需要的同學(xué)可以參考一下
    2022-01-01
  • mysql修改用戶密碼的方法和mysql忘記密碼的解決方法

    mysql修改用戶密碼的方法和mysql忘記密碼的解決方法

    這篇文章主要介紹了mysql修改用戶密碼的方法和mysql忘記密碼的解決方法,大家參考使用吧
    2014-01-01
  • MySQL日期格式以及日期函數(shù)舉例詳解

    MySQL日期格式以及日期函數(shù)舉例詳解

    這篇文章主要給大家介紹了關(guān)于MySQL日期格式及日期函數(shù)的相關(guān)資料,日期在數(shù)據(jù)庫(kù)中是一個(gè)常見(jiàn)且重要的數(shù)據(jù)類型,在MySQL中我們可以使用各種函數(shù)和格式化選項(xiàng)來(lái)處理和顯示日期,需要的朋友可以參考下
    2023-11-11
  • PHP中實(shí)現(xiàn)MySQL嵌套事務(wù)的兩種解決方案

    PHP中實(shí)現(xiàn)MySQL嵌套事務(wù)的兩種解決方案

    這篇文章主要介紹了PHP中實(shí)現(xiàn)MySQL嵌套事務(wù)的兩種解決方案,本文分析了doctrine和laravel的實(shí)現(xiàn)方式,并提取出來(lái)分析和總結(jié),需要的朋友可以參考下
    2015-02-02
  • MySQL中crash safe數(shù)據(jù)完整性機(jī)制面試精講

    MySQL中crash safe數(shù)據(jù)完整性機(jī)制面試精講

    這篇文章主要為大家介紹了MySQL數(shù)據(jù)完整性crash safe特性面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • centos7.2離線安裝mysql5.7.18.tar.gz

    centos7.2離線安裝mysql5.7.18.tar.gz

    這篇文章主要為大家詳細(xì)介紹了centos7.2離線安裝mysql5.7.18.tar.gz,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • mysql觸發(fā)器實(shí)時(shí)檢測(cè)一條語(yǔ)句進(jìn)行備份刪除思路詳解

    mysql觸發(fā)器實(shí)時(shí)檢測(cè)一條語(yǔ)句進(jìn)行備份刪除思路詳解

    遇到過(guò)這樣一個(gè)需求,在一張表里會(huì)不時(shí)出現(xiàn) “違規(guī)” 字樣的字段,需要在出現(xiàn)這個(gè)字段的時(shí)候,把整行的數(shù)據(jù)刪掉,針對(duì)這個(gè)需求我們?cè)撊绾尾僮髂?,下面跟隨小編看下mysql觸發(fā)器實(shí)時(shí)檢測(cè)一條語(yǔ)句進(jìn)行備份刪除的解決思路,一起看看吧
    2021-09-09

最新評(píng)論