首頁 > 軟體

解讀MySQL中一個B+樹能儲存多少資料

2023-11-02 06:00:23

MySQL中一個B+樹能儲存多少資料

MySQL聚簇索引的儲存結構

MySQL中InnoDB頁的大小預設是16k。也可以自己進行設定。(計算機在儲存資料的時候,最小儲存單元是磁區,一個磁區的大小是 512 位元組,而檔案系統(例如 XFS/EXT4)最小單元是塊,一個塊的大小是 4KB。

InnoDB 引擎儲存資料的時候,是以頁為單位的,每個資料頁的大小預設是 16KB,即四個塊。)

在B+樹中,一個結點就是一頁。非葉子結點由主鍵值和一個指向下一層的地址的指標組成的組合組成。葉子結點中由一組鍵值對和一個指向該層下一頁的指標組成,鍵值對儲存的主鍵值和資料。

由儲存結構,可以大概計算出一個B+樹能儲存的資料數量。

指標在InnoDB中為6位元組,設主鍵的型別是bigint,佔8位元組。一組就是14位元組。

計算出一個非葉子結點可以儲存16 * 1024 / 14 = 1170個索引指標。

假設一條資料的大小是1KB,那麼一個葉子結點可以儲存16條資料。

得出兩層B+樹可以儲存1170 x 16 = 18720 條資料。

三層B+樹可以儲存1170 x 1170 x 16 = 21902400條資料。

MySQL中B樹與B+樹的區別

B樹

B樹和B+樹都是應用在資料庫索引上,可以認為是m叉的多路平衡查詢樹,但是理論上講,二元樹的查詢速度和比較次數都更小,為什麼不用二元樹呢?

這是因為我們要考慮磁碟IO的影響,它相對於記憶體來說是很慢的,資料庫索引是儲存在磁碟上的,當資料量很大時,就不能把整個索引全部載入到記憶體中,只能逐一載入每一個磁碟頁(對應索引樹的節點)。

所以我們要減少IO的次數,對於樹來說,IO次數就是樹的高度,而“矮胖”就是B樹的特徵之一。

B樹的特徵:

  • 關鍵字集合分佈在整顆樹中;
  • 任何一個關鍵字出現且只出現在一個結點中;
  • 搜尋有可能在非葉子結點結束;
  • 其搜尋效能等價於在關鍵字全集內做一次二分查詢;

B+樹

B+樹是B樹的變體,是一種查詢效能更好的B樹。B+樹是一種平衡查詢樹在B+樹中,所有記錄節點都是按鍵值的大小順序存放在同一層的葉節點中,各葉結點指標進行連線。

B+樹的特徵:

  • 有n棵子樹的非葉子結點中含有n個關鍵字(b樹是n-1個),這些關鍵字不儲存資料,只用來索引,所有資料都儲存在葉子節點(b樹是每個關鍵字都儲存資料)。
  • 所有的葉子結點中包含了全部關鍵字的資訊,及指向含這些關鍵字記錄的指標,且葉子結點本身依關鍵字的大小自小而大順序連結。
  • 所有的非葉子結點可以看成是索引部分,結點中僅含其子樹中的最大(或最小)關鍵字。
  • 通常在b+樹上有兩個頭指標,一個指向根結點,一個指向關鍵字最小的葉子結點。
  • 同一個數位會在不同節點中重複出現,根節點的最大元素就是b+樹的最大元素。

B樹與B+樹的區別

  • B樹的中間節點儲存節點和資料,B+樹的中間節點不儲存資料,資料儲存在葉子節點中;所以磁碟頁能容納更多的節點元素,更“矮胖”;
  • B樹的查詢要只要匹配到元素,就不用管在什麼位置,B+樹查詢必須匹配到葉子節點,所以B+樹查詢更穩定;
  • 對於範圍查詢到說,B樹要從頭到尾查詢,而B+樹只需要在一定的範圍內的葉子節點中查詢就可以;
  • B+樹的葉子節點通過指標連線,從左到右順序排列;
  • B+樹的非葉子節點與葉子節點冗餘;

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com