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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

为什么MySQL索引更适合B+树而不是二叉树、B树

發(fā)布時(shí)間:2025/3/11 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么MySQL索引更适合B+树而不是二叉树、B树 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一 數(shù)據(jù)庫(kù)為什么使用B+樹(shù)

1. 與二叉樹(shù)相比
二叉樹(shù)相比于順序查找的確減少了查找次數(shù),但是在最壞情況下,二叉樹(shù)有可能退化為順序查找。而且就二叉樹(shù)本身來(lái)說(shuō),當(dāng)數(shù)據(jù)庫(kù)的數(shù)據(jù)量特別大時(shí),其層數(shù)也將特別大。二叉樹(shù)的高度一般是log_2^n,B樹(shù)的高度是log_t^((n+1)/2) + 1,其高度約比B樹(shù)大lgt倍。n是節(jié)點(diǎn)總數(shù),t是樹(shù)的最小度數(shù)。

假如每個(gè)盤(pán)塊可以正好存放一個(gè)B樹(shù)的結(jié)點(diǎn)(正好存放2個(gè)文件名)。那么一個(gè)BTNODE結(jié)點(diǎn)就代表一個(gè)盤(pán)塊,而子樹(shù)指針就是存放另外一個(gè)盤(pán)塊的地址。

下面,咱們來(lái)模擬下B樹(shù)索引查找文件29的過(guò)程:

  • 根據(jù)根結(jié)點(diǎn)指針找到文件目錄的根磁盤(pán)塊1,將其中的信息導(dǎo)入內(nèi)存。【磁盤(pán)IO操作 1次】
  • 此時(shí)內(nèi)存中有兩個(gè)文件名17、35和三個(gè)存儲(chǔ)其他磁盤(pán)頁(yè)面地址的數(shù)據(jù)。根據(jù)算法我們發(fā)現(xiàn):17<29<35,因此我們找到指針p2。
  • 根據(jù)p2指針,我們定位到磁盤(pán)塊3,并將其中的信息導(dǎo)入內(nèi)存。【磁盤(pán)IO操作 2次】
  • 此時(shí)內(nèi)存中有兩個(gè)文件名26,30和三個(gè)存儲(chǔ)其他磁盤(pán)頁(yè)面地址的數(shù)據(jù)。根據(jù)算法我們發(fā)現(xiàn):26<29<30,因此我們找到指針p2。
  • 根據(jù)p2指針,我們定位到磁盤(pán)塊8,并將其中的信息導(dǎo)入內(nèi)存。【磁盤(pán)IO操作 3次】

此時(shí)內(nèi)存中有兩個(gè)文件名28,29。根據(jù)算法我們查找到文件名29,并定位了該文件內(nèi)存的磁盤(pán)地址。

2. 與B樹(shù)相比
B樹(shù)在提高IO性能的同時(shí),并沒(méi)與解決元素遍歷時(shí)效率低下的問(wèn)題,正是為了解決這個(gè)問(wèn)題,B+數(shù)應(yīng)運(yùn)而生。B+數(shù)只需遍歷葉子節(jié)點(diǎn)即可實(shí)現(xiàn)整棵樹(shù)的遍歷,而B(niǎo)樹(shù)必須使用中序遍歷按序掃庫(kù),B+樹(shù)支持范圍查詢(xún)非常方便。這才是數(shù)據(jù)庫(kù)選用B+樹(shù)的主要原因。

另外,最后說(shuō)一下,并不是說(shuō)B+樹(shù)就比B樹(shù)好,有很多基于頻率的搜索是選用B樹(shù),越頻繁query的結(jié)點(diǎn)越往根上走,前提是需要對(duì)query做統(tǒng)計(jì),而且要對(duì)key做一些變化。
無(wú)論是B樹(shù)還是B+樹(shù)由于前邊幾層反復(fù)query,因此早已被加載入內(nèi)存,不會(huì)出現(xiàn)讀磁盤(pán)IO。一般啟動(dòng)的時(shí)候,就會(huì)主動(dòng)換入內(nèi)存。在內(nèi)存中B+樹(shù)并沒(méi)有優(yōu)勢(shì),只有在磁盤(pán)中B+樹(shù)的威力才能顯現(xiàn)。

參考文獻(xiàn):

B樹(shù)高度計(jì)算
B+樹(shù)和B樹(shù)讀取磁盤(pán)過(guò)程

總結(jié)

以上是生活随笔為你收集整理的为什么MySQL索引更适合B+树而不是二叉树、B树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。