MySQL-B+Tree索引

  • 總結的很好

  • 結構圖

性質(m叉B+樹):

  1. 樹中每個結點至多有m個孩子。
  2. 除根結點和葉子結點外,其它每個結點至少有[m/2]個孩子。
  3. 若根結點不是葉子結點,則至少有2個孩子。
  4. 所有葉子結點都出現在同一層。
  5. 每個非終端節點中包含n個關鍵字信息:(A0,K1,A1,K2,A2,......,Kn,An)。其中,Ki (i=1...n)爲關鍵字,且關鍵字按順序排序Ki < K(i-1)。Ai爲指向子樹根的接點,且指針A(i-1)指向子樹種所有結點的關鍵字均小於Ki,但都大於K(i-1)。關鍵字的個數n必須滿足: [m/2]-1 <= n <= m-1

優勢:

  1. 只有葉子節點才記錄數據,非葉子節點只包含索引;所有的非終端節點(內部節點)並不存儲數據信息,而是保存其葉子節點的最小值作爲索引。 這樣,一次性讀入內存中的需要查找的關鍵字也就越多。相對來說IO讀寫次數也就降低了。
  2. 能夠提供穩定高效的範圍掃描(range-query)功能;這也是爲什麼數據庫和操作系統中的文件系統通常會採用b+樹作爲數據索引的原因,這個特點主要因爲所有葉子節點相互連接,並且葉子節點本身依關鍵字的大小自小而大順序鏈接。

 

  • MySQL爲什麼使用 B+Tree
  1. mysql的數據是放在外部存儲的,也就是說磁盤IO纔是性能瓶頸的關鍵,所以我們需要的是減少樹的深度,所以我們需要更多分叉的樹 ,還需要更適合磁盤操作特性的數據結構。
  2. B+樹是爲磁盤或其他直接存取的輔助存儲設備而設計的一種數據結構。
  3. MySQL爲什麼選取B+樹,本質上是因爲MySQL數據是存放在外部存儲的。

參考:

  1. MySql中BTree索引的實現原理以及使用的總結
  2. MySQL索引背後的數據結構及算法原理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章