1. 程式人生 > 其它 >MySQL索引結構B樹、B+樹的原理及區別整理

MySQL索引結構B樹、B+樹的原理及區別整理

索引是一種資料儲存結構,對錶中一列或多列進行排序以快速定位獲取資料。就像一本書的目錄就是一個索引,如果想在一本書中找到某個主題,一般會先找到對應頁碼。在mysql中,儲存引擎用類似的方法使用索引,先在索引中找到對應值,然後根據匹配的索引記錄找到對應的行。

B樹

大多數儲存引擎都支援B樹索引。B樹通常意味著所有的值都是按順序儲存的,並且每一個葉子到根的距離相同。B樹索引能夠加快訪問資料的速度,因為儲存引擎不再需要進行全表掃描來獲取資料。下圖就是一顆簡單的B數。

B樹的查詢流程:

如上圖我要從找到E字母,查詢流程如下:

  1)獲取根節點的關鍵字進行比較,當前根節點關鍵字為M,E<M(26個字母順序),所以往找到指向左邊的子節點(二分法規則,左小右大,左邊放小於當前節點值的子節點、右邊放大於當前節點值的子節點)。

  2)拿到關鍵字D和G,D<E<G 所以直接找到D和G中間的節點。

  3)拿到E和F,因為E=E 所以直接返回關鍵字和指標資訊(如果樹結構裡面沒有包含所要查詢的節點則返回null)。

  4)通過指標資訊取出這條記錄的所有資訊。

B+樹

下圖為B+樹的結構,B+樹是B樹的升級版,我們可以觀察一下,B樹和B+樹的區別是什麼?

B+樹和B樹的區別是:

  1)B樹的節點(根節點/父節點/中間節點/葉子節點)中沒有重複元素,B+樹有。

  2)B樹的中間節點會儲存資料指標資訊,而B+樹只有葉子節點才儲存。

  3)B+樹的每個葉子節點有一個指標指向下一個節點,把所有的葉子節點串在了一起。

從下圖我們可以直觀的看到B樹和B+樹的區別:紫紅色的箭頭是指向被索引的資料的指標,大紅色的箭頭即指向下一個葉子節點的指標。

假設被索引的列是主鍵,現在查詢主鍵為5的記錄,模擬一下查詢的過程:

  B樹,在倒數第二層的節點中找到5後,可以立刻拿到指標獲取行資料,查詢停止。

  B+樹,在倒數第二層的節點中找到5後,由於中間節點不存有指標資訊,則繼續往下查詢,在葉子節點中找到5,拿到指標獲取行資料,查詢停止。

  B+樹每個父節點的元素都會出現在子節點中,是子節點的最大(或最小)元素。葉子節點儲存了被索引列的所有的資料。

那B+樹比起B樹的優點:

  1)由於中間節點不存指標,同樣大小的磁碟頁可以容納更多的節點元素,樹的高度就小。(資料量相同的情況下,B+樹比B樹更加“矮胖”),查詢起來就更快。

  2)B+樹每次查詢都必須到葉子節點才能獲取資料,而B樹不一定,B樹可以在非葉子節點上獲取資料。因此B+樹查詢的時間更穩定。

  3)B+樹的每一個葉子節點都有指向下一個葉子節點的指標,方便範圍查詢和全表查詢:只需要從第一個葉子節點開始順著指標一直掃描下去即可,而B樹則要對樹做中序遍歷。

參考:https://blog.csdn.net/qq_36261130/article/details/100556264

本文來自部落格園,作者:Jcpeng_std,轉載請註明原文連結:https://www.cnblogs.com/JCpeng/p/15231338.html