B樹,B 樹,以及它們和資料庫索引之間的關係

2022-06-30 19:00:13 字數 3279 閱讀 4365

學習b樹和b+樹,需要從以下幾方面來理解,直接上來整定義,很難懂。

知識點如下:

1. 磁碟結構

2. 資料如何在磁碟中儲存

3. 什麼是索引

4. 什麼是多級索引

5. m-way搜尋樹(二叉搜尋樹bst的推廣)

6. b樹

7. b樹的插入和刪除

8. b+樹

一、磁碟結構

磁碟(硬碟)中儲存介質是圓形的,類似光碟。資料記錄在這些圓盤上(別問怎麼存的,問就是不懂).那麼怎麼在圓盤上進行定位呢?

類似於平面直角座標系, 我們用x軸和y軸, 任何乙個點只要知道(x,y)座標即可定位.

磁碟上,我們用磁軌(track)和扇區(sector)來定位. 磁軌就是一圈一圈的同心圓,扇區就是把大圓切成的幾個大扇形.

所以用(trackno, sectorno)這個座標就可以定位到乙個塊(block), 資料就存在這個block裡, 塊是儲存的最小單元, 通常大小為512位元組.

能夠定位到乙個塊了, 但這個塊有512個位元組,  所以還得乙個offset偏移量, 來準確把資料定位到究竟是哪乙個位元組.

程式從硬碟裡讀取資料到記憶體,計算機學科中的研究領域也在此分為兩部分,研究(記憶體中的)資料及其關係就是資料結構, 研究資料如何在磁碟中高效訪問的就是dbms資料庫. 

二、資料如何在磁碟中儲存

現在假設我們有一張資料表, employee表. 假設各個字段長度如下, 加起來剛好128位元組. 意思就是表中的一行(一條記錄)大小為128位元組.

假如有100行資料, 共12800位元組,每個塊能存512位元組,那就需要25個塊.

4行記錄剛好512位元組,乙個塊。

三、索引

為了快速查詢到底是哪25個塊記錄著這些資料,我們要給資料建立索引。索引由employee表的id作為查詢key,value是乙個指向哪個block的指標。

索引也是資料,也得存磁碟裡。也就是它也得存到block裡。假設一行索引16位元組。那麼32條資料佔乙個block,100條資料佔3.2個塊四捨五入4個block。

那麼查詢乙個資料,先在索引裡找,最多需要查4個block,完了從資料里查,直接通過索引能查到乙個block,一共讀了5個block,比直接在資料里查25個block少了很多。

四、多級索引

如果有1000條資料,之前100條資料,它的索引佔了4個block,那1000條資料的索引就佔了40個block(隨便算的,並不嚴謹)。

為了更快查詢,我們可以給這40個block也簡歷索引,就是多級索引了,暫時稱為二級索引吧。二級索引的第一條記錄,指向一級索引的第乙個block(32行),

一級索引一共有佔據40個block,那麼二級索引就一共有40行,32行佔乙個位元組,40/32,二級索引一共只佔1.2約等於2個block。

查詢時,二級(2個block)->一級(1個block)->資料(1個block),大大縮減了查詢時讀取磁碟塊的數量。

五、m-路搜尋樹

多級索引,就是一層一層的對資料、索引所在的block進行指標指向,它看起來已經很像樹型結構了。但我們需要的是一共能夠自我調整(增加級數、減少級數)的樹。

回憶一下二叉搜尋樹,乙個節點中只有乙個數字(乙個key),按照左小右大,它有兩個孩子。

m-way搜尋樹,每個節點中有m-1個key,由小到大k1乙個4-way搜尋樹的節點內部結構如下。

這種m-way搜尋樹可以用來存索引嗎?可以,比如下面這個4路的,rp是指向表中資料所在位置的指標。

但是m-way搜尋樹有些問題,第一,因為它的定義簡單(類似二叉搜尋樹),直接按照定義來插入資料,會產生不平衡的樹。比如乙個度為10的m-way搜尋樹,

本來乙個節點能放9個key,但是直接插入的話,它就成了單邊樹。

第二它不能自我管理。

六、b樹

b樹就是一棵m-way搜尋樹上增加了一些定義和限制條件。假設度為m(意思是乙個節點最多有m個孩子)

1. 每個節點至少得有[m/2] (上取整)個子樹;(此定義是用來控制樹的高度,防止單邊樹產生) 

2. 根節點最少可以有兩個孩子(子樹);(這條定義是用來特殊處理根節點的。假如沒有此定義,整棵樹都沒法生成,新加入

的資料全得往子樹里放,根節點的key加不進去。)

3. 所有葉子節點都在同一層;

4. 建立樹是乙個從底向上的過程;

七. b樹的插入

下面是乙個b樹建立的例子,度為4,key最多為3.

插入10, 20, 40後, 50沒地方放了。做法是開始分割節點,以分界點40作為父節點,10、20放乙個節點,50放乙個節點(這種分級點選擇方法預設把較多資料放到節點左邊)。

接著插入60, 70, 插入80的時候再次分割,並且把分界點70送到父節點中。

更夠自動調整層高和節點大小的b樹,其結構已經很像資料庫的多級索引了,下圖紅框意思是指向資料的指標。節點裡的key就是索引的id。

八、b+樹

1. b樹中,所有節點都有指向索引位址的指標。b+樹中只有葉子節點有這種指標。

2. b+樹中,葉子節點中會有其根節點的乙份copy,

3. 葉子節點互相連線;

4. b+樹的結構更像多級索引,只有一級索引上有連線至資料位址的指標。

只有第一級索引是dense的,其他高階索引是sparse的。

b樹b 樹b 樹 資料庫之B 樹

資料庫索引就是使用b 樹和b 樹來實現的 為什麼要建立b 樹演算法?給出兩個常用的sql語句 根據某個值查詢資料 select from user where id 1234 根據區間值來查詢某些資料 select from user where id 1234and id 2345 考慮到效能方面...

資料庫索引(B樹,B 樹,雜湊)

一.什麼是索引?索引的目的就是便於快速查詢。一本書的索引就是目錄,可以讓我們快速定位到要查詢的內容 資料庫的資料是以記錄的方式存在的,所以索引的目的就是便於查詢某一些記錄。索引型別 常見的資料庫書籍中的關於索引類別的一些稱呼 唯一索引 不允許其中任何兩行具有相同值的索引 使用主鍵和候選鍵建立的索引就...

資料庫索引(B樹,B 樹,雜湊)

資料庫索引是儲存引擎用於快速找到記錄的一種資料結構。高效能mysql 一.什麼是索引?索引的目的就是便於快速查詢。一本書的索引就是目錄,可以讓我們快速定位到要查詢的內容 資料庫的資料是以記錄的方式存在的,所以索引的目的就是便於查詢某一些記錄。索引型別 常見的資料庫書籍中的關於索引類別的一些稱呼 唯一...