查詢速度更快,查詢更穩定。
關鍵字:索引欄位的值資訊,左閉合區間原則。
二叉樹資料結構中的二叉樹;樹是一種一對多的資料結構。樹又有很多子集,比如:二叉樹、二叉搜尋樹、2-3樹、紅黑樹等等。
樹的特徵:
1.沒有父結點的結點叫根(根結點),乙個數有且只有乙個根;
2.每個結點有0個或多個子結點;
3.一顆樹里也可擁有子樹,且子樹不能相交;
(根結點,子結點,葉子結點,子樹)
度每個結點擁有的子樹數量稱為該結點的度(直接子節點,不能間接),簡單的說結點的子節點個數就是它的度。例如上圖中d結點的度為3。度為0的結點成為葉節點,也就是沒有子結點的結點`。
二叉樹二叉樹的特徵:
1.每個結點最多有2個子結點的樹(就是不存在度大於2的結點);
2.左右子樹有一定順序(比如公升序或降序,如下圖中8的右子結點大於左子節點,結點2和7的子節點也是如此關係)。(左右子結點之間有一定的順序關係,左側的小於右側的)
二叉樹:簡單地理解,滿足以下兩個條件的樹就是二叉樹:本身是有序樹;樹中包含的各個節點的度不能超過 2,即只能是 0、1 或者 2;
二叉樹具有以下幾個性質:
1、二叉樹中,第 i 層最多有 2i-1 個結點。
2、如果二叉樹的深度為 k,那麼此二叉樹最多有 2k-1 個結點。
滿二叉樹
滿二叉樹是所有非葉結點的子結點個數都為2,看起來呈水平對稱。其特徵為:
1.所有葉結點都在最後一層;
2.非葉結點的所有結點的度都為2;
二叉樹的順序儲存結構
二叉樹的儲存結構有兩種,分別為順序儲存和鏈式儲存。本節先介紹二叉樹的順序儲存結構。
採用鏈式儲存,則只需從樹的根節點開始,將各個節點及其左右孩子使用鍊錶儲存即可。
採用鏈式儲存二叉樹時,其節點結構由 3 部分構成(如下圖所示):
1、指向左孩子節點的指標(lchild); 資料域+指標。
2、節點儲存的資料(data);
3、指向右孩子節點的指標(rchild);
二叉樹先序遍歷
二叉樹先序遍歷的實現思想是:
訪問根節點;
訪問當前節點的左子樹;
若當前節點無左子樹,則訪問當前節點的右子樹;
前序遍歷,也叫先根遍歷,遍歷的順序是,根,左子樹,右子樹
遍歷結果:a,b,e,f,c,g
中序遍歷,也叫中根遍歷,順序是 左子樹,根,右子樹
遍歷結果:e,b,f,a,g,c
後序遍歷,也叫後根遍歷,遍歷順序,左子樹,右子樹,根
遍歷結果:e,f,b,g,c,a
平衡二叉樹
b tree指的是平衡樹,平衡二叉樹是基於二分法的策略提高資料的查詢速度的二叉樹的資料結構。
平衡二叉樹是採用二分法思維把資料按規則組裝成乙個樹形結構的資料,用這個樹形結構的資料減少無關資料的檢索,大大的提公升了資料檢索的速度;
非葉子節點只能允許最多兩個子節點存在,每乙個非葉子節點資料分布規則為左邊的子節點小當前節點的值,右邊的子節點大於當前節點的值(這裡值是基於自己的演算法規則而定的,比如hash值);
子結點,根結點,子結點。 最後乙個結點為葉子結點。
1)左側的子節點小於當前結點的值;
2)右側的子節點大於當前結點的值。
保證資料平衡的情況下查詢資料的速度近於二分法查詢;
b+樹是b樹的乙個公升級版,相對於b樹來說b+樹更充分的利用了節點的空間,讓查詢速度更加穩定,其速度完全接近於二分法查詢。
1、b+樹的非葉子節點不儲存關鍵字記錄的指標,這樣使得b+樹每個節點所能儲存的關鍵字大大增加;子節點不儲存指標。
2、b+樹葉子節點儲存了父節點的所有關鍵字和關鍵字記錄的指標,每個葉子節點的關鍵字從小到大排列;
3、b+樹的根節點關鍵字數量和其子節點個數相等;
4、b+的非葉子節點只進行資料索引,不會存實際的關鍵字記錄的指標,所有資料位址必須要到葉子節點才能獲取到,所以每次資料查詢的次數都一樣;
5、在b樹的基礎上每個節點儲存的關鍵字數更多,樹的層級更少所以查詢資料更快,所有指關鍵字指標都存在葉子節點,所以每次查詢的次數都相同所以查詢速度更穩定;
explain select id from p_hospital where id<10 範圍查詢會走索引。
樹形結構是計算機系統裡最重要的資料結構。
b+樹是b樹的變種,它在每個子節點裡都只存放關鍵字資訊,而只在葉子節點中存放儲存所需的其它附屬資訊,這樣就可以讓子節點的分支因子最大化,也讓樹的高度盡可能的低。
子結點,葉子結點,降低樹的高度。
b+樹的創造者 rudolf bayer 沒有解釋b代表什麼。最常見的觀點是b代表平衡(balanced)。
b樹,平衡樹,平衡二叉樹。
b+tree中,資料檢索規則採用的是左閉合區間,路數和關鍵個數關係為1比1,具體如下圖所示:
b tree和b+tree區別是什麼?
2、b+tree 根節點和支節點沒有資料區,關鍵字對應的資料只儲存在葉子節點中。即只有葉子節點中的關鍵字資料區才會儲存真正的資料內容或者是內容的位址。
mysql為什麼最終要去選擇b+tree?
1、b+tree是b tree的變種,b tree能解決的問題,b+tree也能夠解決(降低樹的高度,增大節點儲存資料量)
2、b+tree掃庫和掃表能力更強,如果我們要根據索引去進行資料表的掃瞄,對b tree進行掃瞄,需要把整棵樹遍歷一遍,而b+tree只需要遍歷他的所有葉子節點即可(葉子節點之間有引用)。
3、b+tree磁碟讀寫能力更強,他的根節點和支節點不儲存資料區,所有根節點和支節點同樣大小的情況下,儲存的關鍵字要比b tree要多。而葉子節點不儲存子節點引用。所以,b+tree讀寫一次磁碟載入的關鍵字比b tree更多。
4、b+tree排序能力更強,如上面的圖中可以看出,b+tree天然具有排序功能。
5、b+tree查詢效率更加穩定,每次查詢資料,查詢io次數一定是穩定的。當然這個每個人的理解都不同,因為在b tree如果根節點命中直接返回,確實效率更高。
資料以主鍵進行聚集儲存,把真正的資料儲存在葉子節點中。innodb設計初衷認為主鍵才是最主要的索引。
如上圖中,葉子節點的資料區儲存的就是真實的資料,在通過索引進行檢索的時候,命中葉子節點,就可以直接從葉子節點中取出行資料。
主鍵索引的葉子節點儲存的是真正的資料。而輔助索引葉子節點的資料區儲存的是主鍵索引關鍵字的值。
搜尋過程為:假如要查詢name = seven的資料,先在輔助索引中查詢最後找到主鍵id = 101,再在主鍵索引中搜尋id為101的資料,最終在主鍵索引的葉子節點中獲取到真正的資料。所以通過輔助索引進行檢索,需要檢索兩次索引。
資料結構 B樹(B Tree)
b樹是乙個平衡的多路搜尋樹,每個節點可以儲存多個元素。對於m階b樹 m 2m 2 m 2 設其任意節點儲存元素的個數為x,那麼 舉些例子 當m 2時,非根節點子節點個數 1 y 21 leq y leq 2 1 y 2,故稱為 1,2 樹,就是二叉搜尋樹。當m 3時,非根節點子節點個數 2 y 32...
(DDIA)資料儲存與檢索(三) B tree
目前我們所討論的日誌結構的索引已經被廣泛認可,但是他們卻不是最普遍的索引型別。被用於構建索引的最普遍的資料結構於此有很大的不同,我們稱之為 b tree 在1970年引入,不到10年之後,已經發展到 無所不在 b trees經受住了時間的考驗。它們仍然是幾乎所有關聯式資料庫中的標準索引實現,而且許多...
資料庫索引實現原理 B TREE
資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢 更新資料庫表中資料。索引的實現通常使用b tree。b tree索引加速了資料訪問,因為儲存引擎不會再去掃瞄整張表得到需要的資料 相反,它從根節點開始,根節點儲存了子節點的指標,儲存引擎會根據指標快速尋找資料。上圖顯示了一種索引方式。...