這篇文章主要介紹MySQL索引的底層實(shí)現(xiàn)原理是什么,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
成都創(chuàng)新互聯(lián)公司長期為上千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為阜新企業(yè)提供專業(yè)的成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì),阜新網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
MySQL索引的底層實(shí)現(xiàn)原理
1、Hash索引
2、BTree索引和B+Tree索引
3、全文索引
(1)BTree索引
(2)B+Tree索引
(3)B+Tree對比BTree優(yōu)點(diǎn):
一、前言
二、索引類型
一、前言
MySQL支持諸多存儲引擎,而各種存儲引擎對索引的支持也各有不同,因此MySQL數(shù)據(jù)庫支持多種索引類型,如BTree索引,B+Tree索引,Hash索引,全文索引等等。
二、索引類型
1、Hash索引
只有memory(內(nèi)存)存儲引擎支持Hash索引,Hash索引引用索引列的值計(jì)算該值的hashCode,然后在hashCode相應(yīng)的位置存儲該值所在行數(shù)據(jù)的物理位置,因?yàn)槭褂蒙⒘兴惴?,因此訪問速度非??欤且粋€(gè)值只能對應(yīng)一個(gè)hashCode,而且是散列的分布式,因此Hash索引不支持范圍查找和排序的功能。
2、BTree索引和B+Tree索引
BTree索引是平衡搜索多叉樹木,如果設(shè)樹的深度為2d(d > 1),高度為h,那么BTree要滿足以下條件:
①每個(gè)葉子結(jié)點(diǎn)的高度要一樣,等于h;
②每個(gè)葉子節(jié)點(diǎn)由n-1個(gè)key和n個(gè)指針point組成,其中d <= n <= 2d,key和point相互間隔,結(jié)點(diǎn)兩端一定是key;
③葉子結(jié)點(diǎn)指針都為null;
④非葉子結(jié)點(diǎn)的key都是[key, data]二元組,其中key表示作為索引的鍵,data為鍵值所在行的數(shù)據(jù)。
B+Tree是BTree的一個(gè)變種,如果設(shè)d為樹的度,h為數(shù)的高度,B+Tree和BTree的不同主要在于:
①B+Tree中的非葉子結(jié)點(diǎn)不存儲數(shù)據(jù),只存儲鍵值;
②B+Tree的葉子結(jié)點(diǎn)沒有指針,所有鍵值都會出現(xiàn)在葉子結(jié)點(diǎn)上,且key存儲的鍵值對應(yīng)data數(shù)據(jù)的物理地址;
③B+Tree的每個(gè)非葉子結(jié)點(diǎn)由n個(gè)鍵值key和n個(gè)指針point組成。
①磁盤讀寫代價(jià)更低;
②查詢速度更穩(wěn)定。
3、全文索引
FullText(全文)索引,僅可用于MyISAM和InnoDB,針對較大的數(shù)據(jù),生成全文索引非常的消耗時(shí)間和空間。
在生成FullText索引時(shí),會為文本生成一份單詞的清單,在索引時(shí)會根據(jù)這個(gè)單詞的清單進(jìn)行索引。
以上是“MySQL索引的底層實(shí)現(xiàn)原理是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!