引用維基百科的定義:』'在電腦科學中,b樹(b-tree)是一種樹狀資料結構,它能夠儲存資料、對其進行排序並允許以o(log n)的時間複雜度執行進行查詢、順序讀取、插入和刪除的資料結構。"簡要說明一下
b+樹
是一種資料結構,但是因為它常常是出現在檔案儲存系統和資料庫系統中,所以大多數討論到b+樹
是基於它作為資料庫索引資料結構,所以本文結合mysql
索引**一下b+樹
。本文參考: 平衡查詢樹之b樹
b樹
和b+樹
的資料結構。
**b樹
和b+樹
兩種資料結構在從磁碟讀取時的差異。
結合mysql
的組合索引,分析組合索引的最左原則,不滿足最左原則查詢一定不走索引嗎?b樹
,概括來說是乙個節點可以擁有多於2個子節點的二叉查詢樹。與自平衡二叉樹不同,b樹
為系統最優化大塊資料的讀和寫操作。b-tree
演算法減少定位記錄時所經歷的中間過程,從而加快訪問速度。
b樹
看做是對2-3查詢樹
的一種擴充套件,即他允許每個節點有m-1個子節點(m 為樹的階,也叫度)。
b+樹
,是對b樹
的一種變形樹,他與b樹
的差異在於:
兩中資料結構的差異也就是b+樹的優勢:
這裡要講乙個預讀的概念,由於儲存介質的特性,磁碟本身訪問就比主存慢得多,再加上機械運動耗費,因此為了提高效率,要儘量減少磁碟i/o,減少讀寫操作。為了達到這個目的,磁碟往往不是嚴格按需讀取,而是每次都會預讀,即使只需要乙個位元組,磁碟也會從這個位置開始,順序向後讀取一定長度的資料放入記憶體。理論依據:區域性性理論
,當乙個資料被用到時,其附近的資料也通常會馬上被使用。
預讀的長度一般為頁(page)的整倍數。頁是計算機管理儲存器的邏輯塊,硬體及作業系統往往將主存和磁碟儲存區分割為連續的大小相等的塊,每個儲存塊稱為一頁(在許多作業系統中,頁得大小通常為4k),主存和磁碟以頁為單位交換資料。當程式要讀取的資料不在主存中時,會觸發乙個缺頁異常,此時系統會向磁碟發出讀盤訊號,磁碟會找到資料的起始位置並向後連續讀取一頁或幾頁載入記憶體中,然後異常返回,程式繼續執行。
檔案系統及資料庫系統的設計者利用了磁碟預讀原理,將乙個節點的大小設為等於乙個頁,這樣每個節點只需要一次i/o就可以完全載入。為了達到這個目的,在實際實現b-tree還需要使用如下技巧:
因為在磁碟讀取時,每次讀取的資料量大小是固定的,因為b樹
的非葉節點儲存了指標資訊,所以每次讀取b樹結構的資料時,所能夠獲取的索引資訊較少。相反,因為b+樹
的非葉子節點之儲存索引,所以拿到的key相對多,即b+樹的階比較大,同時b+樹的高度更低,更扁平。而高度決定了i/o次數,所以b+樹
結構能夠減少i/o次數。
先簡單介紹一下組合索引,例:建立組合索引(a,bc),那麼相當於建立了(a),(a,b),(a,b,c)三個索引.
由於b+樹的結構,索引有了最左原則
那麼一定要遵循最左原則嗎?不遵循最左原則的sql
語句,一定不走索引,全文搜尋嗎?
select a from table_a where b =
1and c =
2;
使用explain
命令,得出,該語句type
屬性為index
同樣走了索引,不同的是,index表示查詢索引時,是遍歷索引而不是特殊演算法。
但是,如果是
select
*from table_a where b =
1and c =
2;
即:在查詢結果列時,如果有列名不是組合索引中的,那麼,explain命令得出,type屬性為all 資料結構 B樹,B 樹
注意b 樹就是b樹,只是乙個符號.簡介b b 樹是為了磁碟或其它儲存裝置而設計的一種平衡多路查詢樹 相對於二叉,b樹每個內節點有多個分支 與紅黑樹相比,在相同的的節點的情況下,一顆b b 樹的高度遠遠小於紅黑樹的高度 在下面b b 樹的效能分析中會提到 b b 樹上操作的時間通常由訪問磁碟的時間和c...
資料結構 B樹 B 樹
b樹 b樹即 balance tree 也就是平衡樹,它是在搜尋樹的基礎上,維持每乙個節點的左右子樹高度之差不超過1的結構,使得搜尋的平均時間複雜度為o log n 級別。二叉搜尋樹 對於任何乙個節點n,其左邊子樹的所有節點值小於n 其右邊子樹的所有節點的值大於n 給點乙個查詢值,從根節點值開始,一...
資料結構 B樹 B 樹
經典資料結構 b樹與b 樹的解釋 追求極致 磁碟中有兩個機械運動的部分,分別是碟片旋轉和磁臂移動。碟片旋轉就是多少轉每分鐘,而磁碟移動則是在碟片旋轉到指定位置以後,移動磁臂後開始進行資料的讀寫。因為是機械移動,所以盡量減少io,節省開銷 利用平衡樹的優勢加快查詢的穩定性和速度 b樹其分支結點和葉子節...