Mysql?索引?BTree?與?B+Tree?的區(qū)別(面試)
前言
? 說起面試,很多同學(xué)都經(jīng)歷過,但是 面試中 可能會(huì)遇到各種問題,MySQL 的問題 也是非常多,最近我也經(jīng)常面試,也希望問一些數(shù)據(jù)庫一些偏理論和底層的東西,來考察同學(xué)對(duì)技術(shù)的理解程度, 之后 我會(huì)更新這個(gè)系列的 面試。
主要更新的內(nèi)容主要是: 我經(jīng)常面試 一些面試者 喜歡問的一些問題,這是 第一篇 就更新 數(shù)據(jù)庫相關(guān)的吧
BTree 基本概念
B樹。B樹被稱為自平衡樹,因?yàn)樗墓?jié)點(diǎn)是按順序遍歷排序的。在B樹中,一個(gè)節(jié)點(diǎn)可以有兩個(gè)以上的孩子。而且高度在每次更新時(shí)都會(huì)自動(dòng)調(diào)整。在B樹中,數(shù)據(jù)是按照特定的順序排序的,最低值在左邊,最高值在右邊。在B樹中插入數(shù)據(jù)或鍵,比二叉樹更復(fù)雜。
Btree 的特點(diǎn):
- 節(jié)點(diǎn)排序,每個(gè)節(jié)點(diǎn) 可以存放多個(gè)元素,多個(gè)元素也是排序的
- 每個(gè)節(jié)點(diǎn) key 和數(shù)據(jù)在一起
- B樹的所有葉子節(jié)點(diǎn)必須在同一級(jí)別
- 在B樹的葉子節(jié)點(diǎn)上面,不應(yīng)該有空的子樹
- 在關(guān)鍵字全集內(nèi)做一次查找,性能逼近 二分查找的算法
- 任何關(guān)鍵字出現(xiàn)且只出現(xiàn)在一個(gè)節(jié)點(diǎn)中
- 搜索有可能在非葉子節(jié)點(diǎn)結(jié)束,因?yàn)閿?shù)據(jù)和索引在一起存儲(chǔ)的
來一個(gè) max Degree =3 的一個(gè)圖
B+Tree 的特點(diǎn)
B+tree 多路平衡查找樹:
- B+Tree 擁有BTree 的所有的結(jié)構(gòu)特點(diǎn)
- B+Tree 的非葉子節(jié)點(diǎn)不存儲(chǔ)數(shù)據(jù),只存儲(chǔ)關(guān)鍵字,葉子節(jié)點(diǎn)才存儲(chǔ)了所有的數(shù)據(jù),并且是排好序的
- B+Tree 葉子節(jié)點(diǎn)是通過指針連接在一起的(雙向連接), 這樣在范圍查詢中發(fā)揮作用
- 相對(duì)于 Btree , B+tree 層級(jí)更低
B+Trees 特點(diǎn)如下:
查找過程的區(qū)別
兩種索引 查找過程的區(qū)別:
B+tree 需要找到葉子節(jié)點(diǎn) 才能找到數(shù)據(jù), 而Btree 可能不需要找到葉子節(jié)點(diǎn) 就可以找到數(shù)據(jù)
B+Tree索引 如何提高索引的查詢性能 ?
- 找得快, 葉子節(jié)點(diǎn)雙向指針
- 一次IO 操作,找更多的數(shù)據(jù),減少IO 操作,節(jié)點(diǎn)不存數(shù)據(jù),只存關(guān)鍵字,這樣可以存儲(chǔ)更多索引的信息,B+tree 層級(jí)會(huì)降低
為啥 B+Tree 會(huì)比 BTree 高度要低呢?
頁(Page)是Mysql中磁盤和內(nèi)存交換的基本單位, 也是Mysql管理存儲(chǔ)空間的基本單位。
Page
是InnoDB存儲(chǔ)引擎磁盤管理的最小單位,每個(gè)頁默認(rèn)16KB,innodb_page_size
可以通過這個(gè)參數(shù)進(jìn)行修改
B+Tree 中的非葉子節(jié)點(diǎn) 不存儲(chǔ)數(shù)據(jù), 只存關(guān)鍵字,所以一個(gè)Page 中可以容納更多的索引項(xiàng), 一是可以降低樹的高度,二是 在一個(gè)內(nèi)部節(jié)點(diǎn)中可以定位更多的葉子節(jié)點(diǎn)。
到此這篇關(guān)于Mysql 索引 BTree 與 B+Tree 的區(qū)別(面試)的文章就介紹到這了,更多相關(guān)Mysql BTree與B+Tre內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Navicat Premium15連接云服務(wù)器中的數(shù)據(jù)庫問題及遇到坑
這篇文章主要介紹了Navicat Premium15連接云服務(wù)器中的數(shù)據(jù)庫問題及遇到坑,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03mysql把一段數(shù)據(jù)變成一個(gè)臨時(shí)表
這篇文章主要介紹了mysql把一段數(shù)據(jù)變成一個(gè)臨時(shí)表,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-02-02MySQL之解決字符串?dāng)?shù)字的排序失效問題
這篇文章主要介紹了MySQL之解決字符串?dāng)?shù)字的排序失效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08