溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL二級(jí)索引查詢過程是怎么樣的

發(fā)布時(shí)間:2022-02-25 09:18:56 來源:億速云 閱讀:212 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)MySQL二級(jí)索引查詢過程是怎么樣的,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

前言

聚簇索引就是innodb默認(rèn)創(chuàng)建的基于主鍵的索引結(jié)構(gòu),而且表里的數(shù)據(jù)就是直接放在聚簇索引里,作為葉節(jié)點(diǎn)的數(shù)據(jù)頁:

MySQL二級(jí)索引查詢過程是怎么樣的

基于主鍵的數(shù)據(jù)搜索:從聚簇索引的根節(jié)點(diǎn)開始進(jìn)行二分查找,一路找到對應(yīng)數(shù)據(jù)頁,基于頁目錄就直接定位到主鍵目標(biāo)數(shù)據(jù)。

若想對其它字段建立索引,甚至是基于多個(gè)字段建立聯(lián)合索引,此時(shí)索引結(jié)構(gòu)又是咋樣?

假設(shè)對其他字段建立索引,如name、age之類,都是一樣原理。比如你插入數(shù)據(jù)時(shí):

  • 把完整數(shù)據(jù)插入聚簇索引的葉節(jié)點(diǎn)的數(shù)據(jù)頁,同時(shí)維護(hù)好聚簇索引

  • 為你其他字段建立的索引,重新再建立一顆B+樹

比如你基于name字段建立了一個(gè)索引,當(dāng)插入數(shù)據(jù)時(shí),就會(huì)重新搞一顆B+樹,B+樹的葉節(jié)點(diǎn)也是數(shù)據(jù)頁,但該數(shù)據(jù)頁里僅放主鍵字段和name字段:

MySQL二級(jí)索引查詢過程是怎么樣的

這是獨(dú)立于聚簇索引之外的另一個(gè)name字段的B+索引樹,其葉節(jié)點(diǎn)的數(shù)據(jù)頁僅存放主鍵和name字段值。

整體排序規(guī)則都跟聚簇索引按照主鍵的排序規(guī)則是一樣,即:

  • 葉節(jié)點(diǎn)的數(shù)據(jù)頁中的name值都是排序的

  • 下一個(gè)數(shù)據(jù)頁里的name字段值都>上一個(gè)數(shù)據(jù)頁里的name字段值

name字段的索引B+樹也會(huì)構(gòu)建多層級(jí)的索引頁,索引頁里存放:

  • 下一層的頁號(hào)

  • 最小name字段值,根據(jù)name字段值排序。

所以若你根據(jù)name字段查數(shù)據(jù),過程也一樣,從name索引樹的根節(jié)點(diǎn)開始,一層一層往下找,一直找到葉節(jié)點(diǎn)的數(shù)據(jù)頁,定位到name字段值對應(yīng)的主鍵值。

然后針對

select * from t where name='xx'

這種語句,先根據(jù)name值在name索引樹里找,找到葉節(jié)點(diǎn),也僅能找到對應(yīng)主鍵值,而找不到這行數(shù)據(jù)的所有字段。

所以還需回表:還需根據(jù)主鍵值,再到聚簇索引里從根節(jié)點(diǎn)開始,找到葉節(jié)點(diǎn)的數(shù)據(jù)頁,定位到主鍵值對應(yīng)的完整數(shù)據(jù)行,此時(shí)才能把select *要的全部字段值都取出。

聯(lián)合索引

比如name+age,運(yùn)行流程同理,建立一個(gè)獨(dú)立的B+樹,葉節(jié)點(diǎn)的數(shù)據(jù)頁存放id+name+age后,默認(rèn)按name排序,name一樣就按age排,不同數(shù)據(jù)頁之間的name+age值的排序也如此。

然后這個(gè)name+age的聯(lián)合索引的B+樹的索引頁存放:

  • 下一層節(jié)點(diǎn)的頁號(hào)

  • 最小的name+age的值

所以當(dāng)你根據(jù)name+age搜索時(shí),就會(huì)走name+age聯(lián)合索引樹,搜索到主鍵,再根據(jù)主鍵到聚簇索引里去搜索。

關(guān)于“MySQL二級(jí)索引查詢過程是怎么樣的”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI