亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

MySQL二級索引查詢過程是怎么樣的

發布時間:2022-02-25 09:18:56 來源:億速云 閱讀:216 作者:小新 欄目:開發技術

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

前言

聚簇索引就是innodb默認創建的基于主鍵的索引結構,而且表里的數據就是直接放在聚簇索引里,作為葉節點的數據頁:

MySQL二級索引查詢過程是怎么樣的

基于主鍵的數據搜索:從聚簇索引的根節點開始進行二分查找,一路找到對應數據頁,基于頁目錄就直接定位到主鍵目標數據。

若想對其它字段建立索引,甚至是基于多個字段建立聯合索引,此時索引結構又是咋樣?

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

  • 把完整數據插入聚簇索引的葉節點的數據頁,同時維護好聚簇索引

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

比如你基于name字段建立了一個索引,當插入數據時,就會重新搞一顆B+樹,B+樹的葉節點也是數據頁,但該數據頁里僅放主鍵字段和name字段:

MySQL二級索引查詢過程是怎么樣的

這是獨立于聚簇索引之外的另一個name字段的B+索引樹,其葉節點的數據頁僅存放主鍵和name字段值。

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

  • 葉節點的數據頁中的name值都是排序的

  • 下一個數據頁里的name字段值都>上一個數據頁里的name字段值

name字段的索引B+樹也會構建多層級的索引頁,索引頁里存放:

  • 下一層的頁號

  • 最小name字段值,根據name字段值排序。

所以若你根據name字段查數據,過程也一樣,從name索引樹的根節點開始,一層一層往下找,一直找到葉節點的數據頁,定位到name字段值對應的主鍵值。

然后針對

select * from t where name='xx'

這種語句,先根據name值在name索引樹里找,找到葉節點,也僅能找到對應主鍵值,而找不到這行數據的所有字段。

所以還需回表:還需根據主鍵值,再到聚簇索引里從根節點開始,找到葉節點的數據頁,定位到主鍵值對應的完整數據行,此時才能把select *要的全部字段值都取出。

聯合索引

比如name+age,運行流程同理,建立一個獨立的B+樹,葉節點的數據頁存放id+name+age后,默認按name排序,name一樣就按age排,不同數據頁之間的name+age值的排序也如此。

然后這個name+age的聯合索引的B+樹的索引頁存放:

  • 下一層節點的頁號

  • 最小的name+age的值

所以當你根據name+age搜索時,就會走name+age聯合索引樹,搜索到主鍵,再根據主鍵到聚簇索引里去搜索。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹿邑县| 分宜县| 铅山县| 乐昌市| 三台县| 莒南县| 那曲县| 云阳县| 江西省| 新河县| 白城市| 贺兰县| 瑞金市| 资源县| 类乌齐县| 淄博市| 清新县| 滦平县| 鄂伦春自治旗| 寿阳县| 济宁市| 渝北区| 绥江县| 腾冲县| 太康县| 博罗县| 长沙县| 泸溪县| 横峰县| 青河县| 桐梓县| 崇仁县| 江城| 临高县| 罗源县| 安平县| 平利县| 许昌县| 嘉峪关市| 山东省| 名山县|