天天看點

Mysql優化學習6-B+樹的發展曆程

學習資料索引查找算法的時候我們可以在一個網站上檢視具體的查找過程 ​​https://www.cs.usfca.edu/~galles/visualization/Algorithms.html​​ 我們預設資料是從小到大排序的
Mysql優化學習6-B+樹的發展曆程

##1.線性查找

線性查找就是從一堆資料的第一個挨個找,是以效率是最慢的

Mysql優化學習6-B+樹的發展曆程

##2.二分查找

二分查找是常考的一道題,我們每次都找數組中中間的資料來對比,如果要找的數小于這個數,那麼我們就在前一半的資料中再取中間的數對比。 就這樣依次直到找到資料。

Mysql優化學習6-B+樹的發展曆程

雖然二分查找的效率已經相對于線性提升了很多,但是有個問題,就是我們必須能找到中間的數在哪裡,但是如果在磁盤中呢,資料存放都是不規律的,這樣二分查找就有問題了。

##3.二叉查找樹

Mysql優化學習6-B+樹的發展曆程

首先不了解二叉查找樹的可以去了解下,那麼在這個樹中可以看到這樣的規律就是一個節點左邊大的數比他小,右邊的比他大,是以我們要找一個資料的時候就可以利用這個規律來找即可。

但是同樣這個樹是有缺陷的,加入我們要插入的資料總是比要插入的節點的數大,那麼不就一直把資料插入到了最右邊嗎,也就是又搞成了線性的資料結構了。

Mysql優化學習6-B+樹的發展曆程
Mysql優化學習6-B+樹的發展曆程

##4.平衡二叉樹

平衡二叉樹相較于二叉查找樹來說 ,他具有自旋的功能,也就是說他可以規避二叉查找樹的一邊過長的問題。

比如我們插入三個資料,1,2,3

Mysql優化學習6-B+樹的發展曆程

平衡二叉樹就會通過旋轉的方式轉換為一個平衡的樹:

Mysql優化學習6-B+樹的發展曆程
Mysql優化學習6-B+樹的發展曆程

按道理說這個平衡二叉樹已經是究極好用的資料結構了,那麼為什麼現在的資料庫還是沒有使用這種資料結構來存儲資料呢? 因為它存儲的資料太少了,每個節點隻能存儲一個資料。

而我們了解到檔案系統(例如XFS/EXT4)他的最小單元是塊,一個塊的大小是4k,也就是說如果使用二叉平衡樹這樣一個節點,就要占用一個塊那麼存儲的資料就太少了,還浪費了資源。

##5.B樹

Mysql優化學習6-B+樹的發展曆程
Mysql優化學習6-B+樹的發展曆程

B樹相對于上面的平衡樹有了一些有點,比如資料存的多了,也不需要平衡了,樹的高度也低了,但是有個問題,就是資料庫中會有範圍查詢的需求 ,在b樹這裡就查找非常麻煩。

##6.B+樹

可能有對于上面的B樹範圍查詢麻煩沒有概念,那麼我們看下B+樹的特點:

Mysql優化學習6-B+樹的發展曆程

繼續閱讀