本篇文章給大家主要講的是關(guān)于什么是mysql索引的數(shù)據(jù)結(jié)構(gòu)的內(nèi)容,感興趣的話就一起來(lái)看看這篇文章吧,相信看完什么是mysql索引的數(shù)據(jù)結(jié)構(gòu)對(duì)大家多少有點(diǎn)參考價(jià)值吧。
全椒網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)公司2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。一、簡(jiǎn)介
mysql索引的數(shù)據(jù)結(jié)構(gòu)是樹,常用的存儲(chǔ)引擎innodb采用的是B+Tree。這里對(duì)B+Tree及其相關(guān)的
查找樹進(jìn)行簡(jiǎn)要介紹。
二、各種查找樹
1、二叉排序樹(也稱為二叉查找樹)
二叉排序樹是最簡(jiǎn)單的查找樹,特點(diǎn):
a)是一棵二叉樹;
b)左子樹所有結(jié)點(diǎn)的值小于它的父結(jié)點(diǎn)的值,右子樹所有結(jié)點(diǎn)的值大于它的父結(jié)點(diǎn)的值。
2、平衡二叉樹(又稱AVL樹)
平衡二叉樹是二叉排序樹的基礎(chǔ)上,對(duì)樹的深度進(jìn)行了限制,從而減少了查找比較的次數(shù),
特點(diǎn):
a)是一棵二叉樹;
b)左子樹所有結(jié)點(diǎn)的值小于它的父結(jié)點(diǎn)的值,右子樹所有結(jié)點(diǎn)的值大于它的父結(jié)點(diǎn)的值;
c)左子樹與右子樹的深度差在-1、0、1內(nèi),否則對(duì)子樹進(jìn)行旋轉(zhuǎn)調(diào)整。
3、B-樹(B-Tree)
B-樹是多路平衡查找樹,相對(duì)于平衡二叉樹,對(duì)父結(jié)點(diǎn)的直接子結(jié)點(diǎn)個(gè)數(shù),不再僅限于2,
可以指定m(自定義),這樣可以在樹的深度不大量增加的前提下,保存更多的結(jié)點(diǎn)。
B-樹是通常在文件系統(tǒng)中使用。
特點(diǎn):
a)樹的每個(gè)結(jié)點(diǎn)最多有m(自定義)子結(jié)點(diǎn);
b)若根結(jié)點(diǎn)不是葉子結(jié)點(diǎn),則至少有兩個(gè)子結(jié)點(diǎn);
c) 除根結(jié)點(diǎn)外的所有非葉子結(jié)點(diǎn),至少有m/2上取整個(gè)子結(jié)點(diǎn);
d)父結(jié)點(diǎn)下的最左邊子樹所有結(jié)點(diǎn)的值均小于父結(jié)點(diǎn)最小值,
最右邊子樹所有結(jié)點(diǎn)的值均大于父結(jié)點(diǎn)大值,
其余中間子樹所有結(jié)點(diǎn)的值則介于指針的父結(jié)點(diǎn)兩邊的值;
e)所有葉子結(jié)點(diǎn)都在同一層;
注意:所有結(jié)點(diǎn)均帶有值
4、B+樹(B+Tree)
B+樹是B-樹變體,相對(duì)于B-樹,葉子結(jié)點(diǎn)的值包含了所有的值,所有父結(jié)點(diǎn)的值是重復(fù)了葉子結(jié)點(diǎn)的值,
父結(jié)點(diǎn)只起索引查找的作用,同時(shí)所葉子結(jié)點(diǎn)也也構(gòu)成了一條有序的鏈表。
mysql中存儲(chǔ)引擎為innodb的索引,采用的數(shù)據(jù)結(jié)構(gòu)即是B+樹。
特點(diǎn):
a)有m個(gè)子結(jié)點(diǎn)的父結(jié)點(diǎn)就有m個(gè)關(guān)鍵字;
b)所有葉子結(jié)點(diǎn)包含了所有關(guān)鍵字(值),且構(gòu)成由小到大的有序鏈表;
c) 所有非葉子結(jié)點(diǎn)起索引作用,結(jié)點(diǎn)僅包含子樹所有結(jié)點(diǎn)的大值;
d)所有葉子結(jié)點(diǎn)都在同一層;
注意:葉子結(jié)點(diǎn)包含了所有的關(guān)鍵字(值)。
5、B*樹(B*Tree)
B*樹是B+樹的變體,相對(duì)B+樹,增加了對(duì)同一層非葉子結(jié)點(diǎn)的指針,即同一層非葉子結(jié)點(diǎn)也構(gòu)成了一條鏈表。
三、總結(jié)
綜上,上述各種查找樹是相互關(guān)聯(lián)的。
歸結(jié)到mysql中innodb索引,采用的是B+樹,如聚簇索引,是通過主鍵來(lái)聚集數(shù)據(jù),采用B+樹實(shí)現(xiàn),
這即是一種索引,也是mysql的一種數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),葉子結(jié)點(diǎn)包含了所有的數(shù)據(jù),非葉子結(jié)點(diǎn)僅起索引作用(若
沒有定義主鍵,則innodb會(huì)隱式定義一個(gè)主鍵來(lái)作為聚簇索引)。
以上關(guān)于什么是mysql索引的數(shù)據(jù)結(jié)構(gòu)詳細(xì)內(nèi)容,對(duì)大家有幫助嗎?如果想要了解更多相關(guān),可以繼續(xù)關(guān)注我們的行業(yè)資訊板塊。