個人見解mysql索引使用b 樹

2021-10-09 05:11:06 字數 883 閱讀 6615

資料庫系統的設計者巧妙利用了磁碟預讀原理,將乙個節點的大小設為等於乙個頁,這樣每個節點只需要一次i/o就可以完全載入。為了達到這個目的,在實際實現b-tree還需要使用如下技巧:

每次新建節點時,直接申請乙個頁的空間,這樣就保證乙個節點物理上也儲存在乙個頁裡,加之計算機儲存分配都是按頁對齊的,就實現了乙個node只需一次i/o。

也就是每個節點大小最大設定為16k(磁碟io大小),這樣方便一次讀取能讀取完乙個節點的資料,而b樹的節點存在資料,因此能存的指標、索引會更少,就要通過增加數高的方式將資料往子節點放,而b+樹則存的都是索引資訊,故可以更好的利用16k的大小進行資料的搜尋查詢。同樣多的資料進行存放的話,b+樹由於每個節點存的索引多,而b樹不得不往子節點放置,所以看起來b+樹要更加矮胖,同時索引查詢可以減少io的次數。

首先b+樹比b樹更加矮胖,然後 以範圍查詢的例子,b+樹可以根據葉子結點指向下乙個葉子結點的指標資訊找到下乙個磁碟塊,而b樹則需要中序遍歷,中序遍歷的過程中涉及到多次磁碟io查詢,因此b+樹可以降低io的次數。

以上是關於b+樹比b樹更矮胖、mysql用b+樹進行建立索引樹可以降低磁碟io的理解。關於區域性性原理可以降低磁碟io,我只能說很牽強吧,因為每個節點資訊都是磁碟隨機儲存的,即使能夠多讀一頁的資料,但不一定有用吧。

關於b樹每個節點大小可以相同,但是也不會說讓其大於一次磁碟io讀取的大小,而b+樹的話,葉子和非葉子節點大小則不一定相同吧,我認為也是可以相同的~。

最後乙個問題是,mysql用b+樹,即使葉子結點在第三層,但是第三層的節點包括資料和索引指標,那麼乙個節點讀的時候不是也要分多次io?我這是理解為乙個葉子節點大小是遠大於16k的大小,如果說也是一次磁碟io大小,那好像存不了幾個資料吧。

參考:

mysql個人見解

mysql基本原理 僅個人理解 mysql屬於c s架構,即客戶端和服務端互動 1.連線 例php mysqli connect 以客戶端發起請求,mysql服務端進行接收並處理,其中客戶端每發起的一次鏈結mysql均起乙個執行緒來維持乙個socket 套接字 此時會有服務端資源的開銷,因此mysq...

博弈 個人 見解

由於周測 做了好久的博弈題,找了好多關於博弈的相關資料,感覺自己,似乎還是動了那麼一點點。臨睡前,就小小的總結一下,希望以後看到的時候,可以有所感悟吧!接下來是正題。講到博弈,事實上也就是找規律,可是知道一般的博弈型別能夠高速便捷的解決這個問題。博弈的型別大致有下面幾種 巴什博弈,威佐夫博奕,尼姆博...

BGP 個人見解

bgp是一種用於自治系統之間的動態路由協議,主要用於交換as之間的可達路由資訊,構建as域間的傳播路徑,防止路由環路的產生,並在as級別應用一些路由策略.bgp作為事實上的internet外部路由協議標準,被廣泛應用於isp之間 1,bgp是一種外部閘道器協議,起作用不在於自動發現網路topo,而在...