日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql的引双向链表_一分钟掌握MySQL的InnoDB引擎B+树索引

發布時間:2025/3/15 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql的引双向链表_一分钟掌握MySQL的InnoDB引擎B+树索引 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL的InnoDB索引結構采用B+樹,B+樹什么概念呢,二叉樹大家都知道,我們都清楚隨著葉子結點的不斷增加,二叉樹的高度不斷增加,查找某一個節點耗時就會增加,性能就會不斷降低,B+樹就是解決這個問題的。

B樹和B+樹

在一棵M階B樹中,每個節點最多有 M-1 個關鍵字,根節點最少可以只有一個關鍵字,非根節點最少有 Math.ceil(m/2)-1個關鍵字,下圖是一棵階數為3的樹

看下圖我們說說B樹的特點,很明顯一個節點存儲的數據更多了,不需要很高的高度就可以存儲更多的數據,把一個節點看作一個磁盤,我們發現查找一個數據時可以減少磁盤IO次數,B樹的每個節點都有data域,

看下圖我們說說B+樹的特點,首先明確一點,B+樹是在B樹的基礎上演化而來的,我們就說不同點,只有葉子節點才有data域,葉子節點包含所有的數據,葉子節點通過指針鏈接形成雙向鏈表。

B/B+樹是為了磁盤或其它存儲設備而設計的一種平衡多路查找樹(相對于二叉,B樹每個內節點有多個分支),與紅黑樹相比,在相同的的節點的情況下,一顆B/B+樹的高度遠遠小于紅黑樹的高度(在下面B/B+樹的性能分析中會提到)。B/B+樹上操作的時間通常由存取磁盤的時間和CPU計算時間這兩部分構成,而CPU的速度非常快,所以B樹的操作效率取決于訪問磁盤的次數,關鍵字總數相同的情況下B樹的高度越小,磁盤I/O所花的時間越少

為什么InnoDB選擇B+樹而不是B樹呢

還是上面兩張圖,對照著看,我們能夠得出一下結論

B+樹的磁盤讀取代價低, 樹每個節點都有data域,B+樹只有葉子節才有,假設每個節點大小16KB,那么B+樹比B樹能存儲更多的關鍵字,一次性讀入內存的關鍵字的內存也會更多,B+樹的高度也會比B樹低,磁盤IO次數會更少。

B+樹對范圍查詢更友好,方便遍歷,B樹葉子節點沒有鏈接,而B+樹葉子節點通過雙向指針鏈接,可以很方便的進行范圍查詢,比如where條件中 age >=3 and age <20,,那么當找到3時就可以順著指針找到20,而B樹是不可以的。

B+樹查詢效率穩定性更好, 在B+樹中,由于分支節點并不是最終指向文件內容的節點,分支節點只是葉子節點的索引,所以對于任意關鍵字的查找都必須從根節點走到分支節點,所有關鍵字查詢路徑長度相同,每個數據查詢效率相當。而對于B樹而言,其分支節點上也保存有數據,對于每一個數據的查詢所走的路徑長度是不一樣的,效率也不一樣,B樹穩定性不如B+樹好

我們仔細想想我們SQL常見的查詢中,總結起來是不是也就是等于查詢, 范圍查詢

InnoDB非主鍵索引怎么存儲呢?

我們上面介紹的只是主鍵索引是這樣存儲的,那么非主鍵索引呢,其實非主鍵索引也B+樹的,只有非主鍵索引的葉子節點存儲的不是行記錄數據,而是主鍵值,通過主鍵值再次索引獲取所需要的數據。我畫一個粗略的見圖來表示

總結一下B+樹索引

采用了多叉樹的結構,降低了樹的高度,減少了磁盤IO次數,通過對所有葉子節點通過指針雙向鏈接,方便的提供了遍歷所有數據的特性,同時數據也是嚴格有序的,方便范圍查詢,查詢效率的穩定性也非常好。

總結

以上是生活随笔為你收集整理的mysql的引双向链表_一分钟掌握MySQL的InnoDB引擎B+树索引的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。