B樹和B+樹

B樹和B+樹

[TOC]html

參考: B樹、B+樹詳解

前言

B+ 樹是一種存儲結構,經常使用在數據庫創建索引。數據庫

準備知識數組

m階的樹:樹最大分叉有m個,即子節點數最大爲m個;工具

根節點:沒有父節點的節點;spa

葉節點:沒有子節點的節點;指針

內部節點:不是根、葉節點的節點;htm

二叉搜索樹:左子樹中的值要比根節點值 ,右子樹中的值要比根節點值 blog

平衡二叉樹:二叉搜索樹的特殊狀況,左右子樹高度同樣;索引

1、B樹

B數是平衡叉樹,一個m階的B樹,有以下特性:內存

  1. 內部節點最少得有ceil(m/2)個子節點;
  2. 根節點不是葉節點時,至少得有2個子節點,即2階;
  3. m階的節點中包含m-1個數據
  4. 全部葉子節點高度一致;

B樹結構

2、B+樹

B+樹是B樹變體,對其規則作了些改變。改變以下:

  1. 葉子結點由一個有序數組和指向其右邊一個葉子結點的指針組成;
  2. 非葉子節點由一個有序數組組成,可是數組元素由一個索引值一個指針組成;

    1. 指針:指向一個葉子節點;
    2. 索引值:指向的那個葉子節點中最小的索引值;
  3. 非葉節點,是工具節點,用於快速找到指定葉節點,只有葉節點才存儲真正的數據(一行數據);
  4. 葉子節點們相似一個有序鏈表;
  5. m階的節點中包含m個數據;

B+樹結構

2.1 爲何B+樹適合數據庫?

  1. B+樹便於範圍查詢,這是最主要的。

只須要查找最左邊範圍便可,查到後遍歷往右遍歷葉子結點,知道碰到右邊範圍結束,這樣就篩出了全部範圍內數據。

B樹的範圍查找用的是中序遍歷,而B+樹用的是在鏈表上遍歷;

  1. B+樹的磁盤讀寫代價更低。

B+樹的內部結點並無指向關鍵字具體信息的指針。所以其內部結點相對B 樹更小。若是把全部同一內部結點的關鍵字存放在同一盤塊中,那麼盤塊所能容納的關鍵字數量也越多。一次性讀入內存中的須要查找的關鍵字也就越多。相對來講IO讀寫次數也就下降了;

  1. B+樹查詢效率更加穩定

因爲非終結點並非最終指向文件內容的結點,而只是葉子結點中關鍵字的索引。因此任何關鍵字的查找必須走一條從根結點到葉子結點的路。全部關鍵字查詢的路徑長度相同,致使每個數據的查詢效率至關;

相關文章
相關標籤/搜索