最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文了解MySQL二級(jí)索引的查詢過(guò)程

 更新時(shí)間:2022年02月24日 16:11:25   作者:JavaEdge.  
索引是一種用于快速查詢行的數(shù)據(jù)結(jié)構(gòu),就像一本書的目錄就是一個(gè)索引,下面這篇文章主要給大家介紹了關(guān)于MySQL二級(jí)索引查詢過(guò)程的相關(guān)資料,需要的朋友可以參考下

前言

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

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

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

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

  • 把完整數(shù)據(jù)插入聚簇索引的葉節(jié)點(diǎn)的數(shù)據(jù)頁(yè),同時(shí)維護(hù)好聚簇索引
  • 為你其他字段建立的索引,重新再建立一顆B+樹

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

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

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

  • 葉節(jié)點(diǎn)的數(shù)據(jù)頁(yè)中的name值都是排序的
  • 下一個(gè)數(shù)據(jù)頁(yè)里的name字段值都>上一個(gè)數(shù)據(jù)頁(yè)里的name字段值

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

  • 下一層的頁(yè)號(hào)
  • 最小name字段值,根據(jù)name字段值排序。

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

然后針對(duì)

select * from t where name='xx'

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

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

聯(lián)合索引

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

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

  • 下一層節(jié)點(diǎn)的頁(yè)號(hào)
  • 最小的name+age的值

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

總結(jié)

以上就是InnoDB索引的實(shí)現(xiàn)原理,就是建立B+樹,層層二分查找。不同的索引就是建立了不同B+樹,然后增刪改時(shí):

在數(shù)據(jù)頁(yè)里更新數(shù)據(jù)維護(hù)你所有的索引

到此這篇關(guān)于MySQL二級(jí)索引查詢過(guò)程的文章就介紹到這了,更多相關(guān)MySQL二級(jí)索引查詢過(guò)程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

长治市| 柘城县| 肃宁县| 南陵县| 吉首市| 花莲市| 台湾省| 耒阳市| 疏勒县| 马公市| 敦化市| 前郭尔| 罗田县| 溧水县| 铜鼓县| 奉节县| 民权县| 阿尔山市| 华安县| 伊宁县| 昭平县| 通海县| 武城县| 缙云县| 甘泉县| 巢湖市| 扶风县| 巴彦淖尔市| 东丽区| 永丰县| 平舆县| 尖扎县| 大田县| 石景山区| 汽车| 定襄县| 和顺县| 长治县| 印江| 汉沽区| 沙湾县|