Mysql?索引?BTree?與?B+Tree?的區(qū)別(面試)
前言
? 說起面試,很多同學都經(jīng)歷過,但是 面試中 可能會遇到各種問題,MySQL 的問題 也是非常多,最近我也經(jīng)常面試,也希望問一些數(shù)據(jù)庫一些偏理論和底層的東西,來考察同學對技術的理解程度, 之后 我會更新這個系列的 面試。
主要更新的內(nèi)容主要是: 我經(jīng)常面試 一些面試者 喜歡問的一些問題,這是 第一篇 就更新 數(shù)據(jù)庫相關的吧
BTree 基本概念
B樹。B樹被稱為自平衡樹,因為它的節(jié)點是按順序遍歷排序的。在B樹中,一個節(jié)點可以有兩個以上的孩子。而且高度在每次更新時都會自動調(diào)整。在B樹中,數(shù)據(jù)是按照特定的順序排序的,最低值在左邊,最高值在右邊。在B樹中插入數(shù)據(jù)或鍵,比二叉樹更復雜。
Btree 的特點:
- 節(jié)點排序,每個節(jié)點 可以存放多個元素,多個元素也是排序的
- 每個節(jié)點 key 和數(shù)據(jù)在一起
- B樹的所有葉子節(jié)點必須在同一級別
- 在B樹的葉子節(jié)點上面,不應該有空的子樹
- 在關鍵字全集內(nèi)做一次查找,性能逼近 二分查找的算法
- 任何關鍵字出現(xiàn)且只出現(xiàn)在一個節(jié)點中
- 搜索有可能在非葉子節(jié)點結(jié)束,因為數(shù)據(jù)和索引在一起存儲的
來一個 max Degree =3 的一個圖

B+Tree 的特點
B+tree 多路平衡查找樹:
- B+Tree 擁有BTree 的所有的結(jié)構(gòu)特點
- B+Tree 的非葉子節(jié)點不存儲數(shù)據(jù),只存儲關鍵字,葉子節(jié)點才存儲了所有的數(shù)據(jù),并且是排好序的
- B+Tree 葉子節(jié)點是通過指針連接在一起的(雙向連接), 這樣在范圍查詢中發(fā)揮作用
- 相對于 Btree , B+tree 層級更低
B+Trees 特點如下:

查找過程的區(qū)別
兩種索引 查找過程的區(qū)別:
B+tree 需要找到葉子節(jié)點 才能找到數(shù)據(jù), 而Btree 可能不需要找到葉子節(jié)點 就可以找到數(shù)據(jù)
B+Tree索引 如何提高索引的查詢性能 ?
- 找得快, 葉子節(jié)點雙向指針
- 一次IO 操作,找更多的數(shù)據(jù),減少IO 操作,節(jié)點不存數(shù)據(jù),只存關鍵字,這樣可以存儲更多索引的信息,B+tree 層級會降低
為啥 B+Tree 會比 BTree 高度要低呢?
頁(Page)是Mysql中磁盤和內(nèi)存交換的基本單位, 也是Mysql管理存儲空間的基本單位。
Page 是InnoDB存儲引擎磁盤管理的最小單位,每個頁默認16KB,innodb_page_size 可以通過這個參數(shù)進行修改
B+Tree 中的非葉子節(jié)點 不存儲數(shù)據(jù), 只存關鍵字,所以一個Page 中可以容納更多的索引項, 一是可以降低樹的高度,二是 在一個內(nèi)部節(jié)點中可以定位更多的葉子節(jié)點。
到此這篇關于Mysql 索引 BTree 與 B+Tree 的區(qū)別(面試)的文章就介紹到這了,更多相關Mysql BTree與B+Tre內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Navicat Premium15連接云服務器中的數(shù)據(jù)庫問題及遇到坑
這篇文章主要介紹了Navicat Premium15連接云服務器中的數(shù)據(jù)庫問題及遇到坑,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03

