Mysql資料庫B 樹

2021-09-27 01:25:14 字數 724 閱讀 8930

一般來說,索引檔案占用空間比較大, 需要儲存在磁碟上。索引查詢需要通過磁碟i/o操作才能進行,而我們知道,磁碟i/o比記憶體讀取要高幾個數量級,所以如何減少磁碟i/o次數,是索引資料結構選擇的首要參考條件。

計算機區域性性原理認為:當乙個資料被用到時,其附近的資料也通常會馬上被使用。因此為了減少磁碟i/o,磁碟往往不是嚴格按需讀取,磁碟會從讀取的這個位置開始,順序向後讀取一定長度的資料放入記憶體。磁碟一次預讀會讀取頁的整數倍大小的資料。

b-樹的設計利用了計算機的區域性性原理和預讀,每個節點新建時申請磁碟一頁資料的大小,這樣節點載入和查詢只需要一次磁碟i/o。同時b+樹進行了改進,b+樹非葉子節點只用來索引,不存放資料,葉子節點存放完整的資料記錄,且具有指向相鄰葉子節點的指標(方便區間訪問) 。這樣的設計使得b+樹的高度更小,磁碟io讀寫次數就降低了,同時由於b+樹的所有資料都存放在葉子節點上,掃庫的話只需要掃一遍葉子節點即可。

b+樹乙個節點的資料大小就是計算機磁碟一頁資料的大小,計算機一頁資料大小為16k。我們知道,b+樹的非葉子節點存放的是資料索引,假設innodb裡設定的指標大小為6位元組,而儲存的索引欄位為bigint型別,長度為8位元組,則對非葉子節點來說,乙個節點可以儲存16384/14=1167個索引;對於葉子節點來說,假設每條記錄大小為1k,乙個節點可以儲存16k/1k=16個資料。那麼可知,高度為2的b+樹最多可以存放1167*16=18672條資料,高度為3的b+樹最多可以存放1167*1167*16=21790224條資料。

未完待續.....

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 樹 是一種多路搜尋樹 並不是二叉的 1.定義任意非葉子結點最多只有m個兒子 且m 2 2.根結點的兒子數為 2,m 3.除根結點以外的非葉子結點的兒子數為 m 2,m 4.每個結點存放至少m 2 1 取上整 和至多m 1個關鍵字 至少2個關鍵字 5.非葉子結點的關鍵字個數 指向兒子的指標個數 1...

資料庫設計原理 B樹 B 樹 B 樹

b樹即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進入左兒...