中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中 B-Tree和B+Tree的區別是什么

發布時間:2021-07-06 18:08:23 來源:億速云 閱讀:166 作者:Leah 欄目:大數據

這篇文章給大家介紹MySQL中 B-Tree和B+Tree的區別是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

B-Tree 的節點是一個二元數組 [key,data],key 是記錄的鍵,data 是鍵對應的數據,B-Tree中的每個節點根據實際情況可以包含大量的關鍵字信息和分支,每個節點的每個 key 左右各有一個指針,非葉子節點的指針分別指向下一層的節點,葉子節點的指針為 null,如下圖:

MySQL中 B-Tree和B+Tree的區別是什么

要查找值的時候,會先從根節點開始查找,根節點的每個 key 有左右兩個指針,可以通過這兩個指針訪問下一層節點。每次查找都會將查找值與 key 值進行比較,根據比較結果找到合適的指針進入下一層節點,最終,如此重復,最終找到對應的值或者值不存在.

補充下磁盤的知識,系統從磁盤讀取數據到內存時是以磁盤塊(block)為基本單位的,位于同一個磁盤塊中的數據會被一次性讀取出來,而不是需要什么取什么。

InnoDB存儲引擎中有頁(Page)的概念,頁是其磁盤管理的最小單位。InnoDB存儲引擎中默認每個頁的大小為16KB,可通過參數innodb_page_size將頁的大小設置為4K、8K、16K,在MySQL中可通過如下命令查看頁的大小:


mysql> show variables like 'innodb_page_size'

而系統一個磁盤塊的存儲空間往往沒有這么大,因此InnoDB每次申請磁盤空間時都會是若干地址連續磁盤塊來達到頁的大小16KB。InnoDB在把磁盤數據讀入到磁盤時會以頁為基本單位,在查詢數據時如果一個頁中的每條數據都能有助于定位數據記錄的位置,這將會減少磁盤I/O次數,提高查詢效率。

B+Tree是在B-Tree基礎上的一種優化,使其更適合實現外存儲索引結構,InnoDB存儲引擎就是用B+Tree實現其索引結構。

B-Tree結構每個節點中不僅包含數據的key值,還有data值。而每一個頁的存儲空間是有限的,如果data數據較大時將會導致每個節點(即一個頁)能存儲的key的數量很小,當存儲的數據量很大時同樣會導致B-Tree的深度較大,增大查詢時的磁盤I/O次數,進而影響查詢效率。在B+Tree中,所有數據記錄節點都是按照鍵值大小順序存放在同一層的葉子節點上,而非葉子節點上只存儲key值信息,這樣可以大大加大每個節點存儲的key值數量,降低B+Tree的高度。

B+Tree 節點是 B-Tree 的變種,相對于 B-Tree 而言 B+Tree 有如下不同:

非葉子節點只存儲鍵值信息。

所有葉子節點之間都有一個鏈指針。

數據記錄都存放在葉子節點中。

MySQL中 B-Tree和B+Tree的區別是什么

關于MySQL中 B-Tree和B+Tree的區別是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绍兴市| 石柱| 鞍山市| 体育| 高安市| 嘉定区| 桦甸市| 静乐县| 高碑店市| 拉萨市| 海南省| 城市| 吉水县| 嘉义县| 池州市| 德庆县| 吉木乃县| 金山区| 岱山县| 尚志市| 彭州市| 迁安市| 曲麻莱县| 新昌县| 汾西县| 抚远县| 清徐县| 南宫市| 深水埗区| 永靖县| 团风县| 广丰县| 朝阳县| 普格县| 巴林左旗| 巧家县| 当涂县| 乐都县| 安仁县| 容城县| 廉江市|