欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文了解MySQL二級索引的查詢過程

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

前言

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

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

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

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

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

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

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

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

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

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

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

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

然后針對

select * from t where name='xx'

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

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

聯(lián)合索引

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

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

  • 下一層節(jié)點的頁號
  • 最小的name+age的值

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

總結

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

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

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

相關文章

  • phpmyadmin 4+ 訪問慢的解決方法

    phpmyadmin 4+ 訪問慢的解決方法

    很多人用了phpmyadmin4以后的版本發(fā)現(xiàn)速度好像慢了很多,總結下,提供解決方法。
    2013-11-11
  • mysql的日期和時間函數(shù)大全

    mysql的日期和時間函數(shù)大全

    mysql的日期和時間函數(shù) 這里是一個使用日期函數(shù)的例子。下面的查詢選擇所有 date_col 值在最后 30 天內的記錄。
    2008-04-04
  • MySQL數(shù)據(jù)庫安全配置介紹

    MySQL數(shù)據(jù)庫安全配置介紹

    MySQL數(shù)據(jù)庫所在的主機的安全性是最首要的問題,如果主機不安全,被攻擊者控制,那么MySQL的安全性也無從談起。其次就是數(shù)據(jù)目錄和數(shù)據(jù)文件的安全性,也就是權限設置問題。因此MySQL數(shù)據(jù)庫安全配置是至關重要的。
    2011-03-03
  • mysql 10w級別的mysql數(shù)據(jù)插入

    mysql 10w級別的mysql數(shù)據(jù)插入

    幾天前做了一個短信發(fā)送東東,一次性要插入10w以上的手機號碼。我的個天啊。
    2011-08-08
  • mysql表的四種分區(qū)方式總結

    mysql表的四種分區(qū)方式總結

    通俗地講表分區(qū)是將一大表,根據(jù)條件分割成若干個小表,下面這篇文章主要給大家介紹了關于mysql表的四種分區(qū)方式,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • mysql 8.0.12 解壓版安裝教程

    mysql 8.0.12 解壓版安裝教程

    這篇文章主要為大家詳細介紹了mysql 8.0.12 解壓版安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • mysql提示Can't?connect?to?MySQL?server?on?localhost?(10061)完美解決方法

    mysql提示Can't?connect?to?MySQL?server?on?localhost

    這篇文章主要介紹了Can't?connect?to?MySQL?server?on?localhost?(10061)解決方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • MySQL開發(fā)中存儲函數(shù)與觸發(fā)器使用示例

    MySQL開發(fā)中存儲函數(shù)與觸發(fā)器使用示例

    這篇文章主要為大家詳細介紹了MySQL中存儲函數(shù)的創(chuàng)建與觸發(fā)器的設置,文中的示例代碼講解詳細,具有一定的學習價值,需要的可以參考一下
    2023-01-01
  • Navicat for Mysql 字段注釋中文亂碼問題及解決

    Navicat for Mysql 字段注釋中文亂碼問題及解決

    這篇文章主要介紹了Navicat for Mysql 字段注釋中文亂碼問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • MySQL 5.0觸發(fā)器參考教程

    MySQL 5.0觸發(fā)器參考教程

    需要學習mysql觸發(fā)器的朋友需要了解的東西,整理的比較多,建議大家慢慢多練習
    2008-09-09

最新評論