亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一看就懂的MySQL的聚簇索引及聚簇索引是如何長(zhǎng)高的

 更新時(shí)間:2021年05月25日 14:32:43   作者:返回主頁(yè)賜我白日夢(mèng)  
聚簇索引不是一種單獨(dú)的索引類型,而是一種數(shù)據(jù)存儲(chǔ)方式。innodb的聚簇索引實(shí)際上在同一個(gè)結(jié)構(gòu)中保存了B-tree索引和數(shù)據(jù)行。通過(guò)本文學(xué)習(xí)MySQL的聚簇索引及聚簇索引是如何長(zhǎng)高的,感興趣的朋友一起學(xué)習(xí)下吧

這一篇筆記我們簡(jiǎn)述一下

  • MySQL的B+Tree索引到底是咋回事?
  • 聚簇索引索引到底是如何長(zhǎng)高的。

一點(diǎn)一點(diǎn)看,其實(shí)蠻好理解的。

如果你看過(guò)了我之前的筆記,你肯定知道了MySQL進(jìn)行CRUD是在內(nèi)存中進(jìn)行的,也就是在Buffer Pool中。然后你也知道了當(dāng)內(nèi)存中沒(méi)有MySQL需要的數(shù)據(jù)時(shí),MySQL會(huì)從Disk中通過(guò)IO操作將數(shù)據(jù)讀入內(nèi)存中。讀取的單位呢就是:數(shù)據(jù)頁(yè)

一般數(shù)據(jù)頁(yè)長(zhǎng)下面這樣

沒(méi)錯(cuò),數(shù)據(jù)頁(yè)中存儲(chǔ)著真實(shí)的數(shù)據(jù),而且數(shù)據(jù)頁(yè)在內(nèi)存中是以雙向聯(lián)表的方式組織起來(lái)的!如下圖

而在B+Tree的設(shè)定中,它要求主鍵索引時(shí)遞增的,也就是說(shuō)如果主鍵索引時(shí)遞增的話,那么就要求右側(cè)的數(shù)據(jù)頁(yè)中的所有數(shù)據(jù)均比左側(cè)數(shù)據(jù)頁(yè)中的數(shù)據(jù)大。但是很明顯上圖并不符合,因此需要通過(guò)頁(yè)分裂來(lái)調(diào)整成下面這樣。

好,現(xiàn)在你回想一下,之前你肯定有聽(tīng)說(shuō)過(guò):MySQL的B+Tree聚簇索引,只有葉子節(jié)點(diǎn)才存儲(chǔ)真實(shí)的數(shù)據(jù),而非葉子節(jié)點(diǎn)中存儲(chǔ)的是索引數(shù)據(jù),而且葉子節(jié)點(diǎn)之間是通過(guò)雙向鏈表連接起來(lái)

沒(méi)錯(cuò),那所有的B+Tree的葉子節(jié)點(diǎn)就是上圖中的數(shù)據(jù)頁(yè),并且它們確實(shí)是通過(guò)雙向鏈表關(guān)聯(lián)起來(lái)的!

我們接著往下看,如果只看上圖由數(shù)據(jù)頁(yè)連接起來(lái)的雙向鏈表的話,這時(shí)如果我們檢索id=7的數(shù)據(jù)行,那會(huì)發(fā)生什么?

很明顯我們要從頭開(kāi)始掃描!

那你可能會(huì)問(wèn):方才不是說(shuō)B+Tree要求主鍵是遞增的嘛?并且有頁(yè)分裂機(jī)制保證右邊的數(shù)據(jù)頁(yè)中的所有數(shù)據(jù)均比它左邊的數(shù)據(jù)頁(yè)的索引值大。那進(jìn)行二分查找不行嘛?

答:是的,確實(shí)可以在單個(gè)數(shù)據(jù)頁(yè)中進(jìn)行二分查找,但是數(shù)據(jù)頁(yè)之間的組織關(guān)系是鏈表呀,所以從頭開(kāi)始遍歷是避免不了的。

那MySQL怎么辦的呢?

如下圖:MySQL針對(duì)諸多的數(shù)據(jù)頁(yè)抽象出了一個(gè)索引目錄

那有了這個(gè)索引目錄我們?cè)僭谥T多的數(shù)據(jù)頁(yè)中檢索時(shí)看起來(lái)就容易多了!直接就擁有了二分檢索的能力!

而且這個(gè)所以目錄其實(shí)也是存在于數(shù)據(jù)頁(yè)中的,不同于葉子節(jié)點(diǎn)的是,它里面知識(shí)存儲(chǔ)了索引信息,而葉子節(jié)點(diǎn)中存儲(chǔ)的是真實(shí)數(shù)據(jù)?

而索引頁(yè)的誕生也就意味著B(niǎo)+Tree的雛形已經(jīng)誕生了!

隨著用戶不斷的select,buffer pool中的數(shù)據(jù)頁(yè)的越來(lái)越多,那么索引頁(yè)中的數(shù)據(jù)也會(huì)水漲船高。當(dāng)現(xiàn)有的索引體量超過(guò)16KB(一個(gè)數(shù)據(jù)頁(yè)的容量)時(shí)就不得不搞一個(gè)新的索引頁(yè)來(lái)存儲(chǔ)新的索引信息。這時(shí)這顆B+Tree就會(huì)慢慢變得越來(lái)越胖。

那你也知道B+Tree是B樹(shù)的變種,而B(niǎo)樹(shù)其實(shí)可以是2-3樹(shù)、2-3-4數(shù)....等等M階樹(shù)的泛稱,當(dāng)每個(gè)節(jié)點(diǎn)中能存儲(chǔ)的元素達(dá)到上限后,樹(shù)就會(huì)長(zhǎng)高(上一篇文章有講過(guò))。

就像下圖這樣:

以上就是一看就懂的MySQL的聚簇索引及聚簇索引是如何長(zhǎng)高的的詳細(xì)內(nèi)容,更多關(guān)于MySQL聚簇索引的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL數(shù)據(jù)庫(kù)運(yùn)維之?dāng)?shù)據(jù)恢復(fù)的方法

    MySQL數(shù)據(jù)庫(kù)運(yùn)維之?dāng)?shù)據(jù)恢復(fù)的方法

    本篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)運(yùn)維之?dāng)?shù)據(jù)恢復(fù)的方法,此處總結(jié)一下恢復(fù)方案,并結(jié)合數(shù)據(jù)庫(kù)的二進(jìn)制日志做下數(shù)據(jù)恢復(fù)的示范。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • windows下mysql忘記root密碼的解決方法

    windows下mysql忘記root密碼的解決方法

    windows下mysql忘記root密碼的解決方法,碰到這個(gè)問(wèn)題的朋友可以參考下。
    2010-02-02
  • 詳解MySql中InnoDB存儲(chǔ)引擎中的各種鎖

    詳解MySql中InnoDB存儲(chǔ)引擎中的各種鎖

    本文主要介紹了詳解MySql中InnoDB存儲(chǔ)引擎中的各種鎖,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Mysql5.6修改root密碼教程

    Mysql5.6修改root密碼教程

    今天小編就為大家分享一篇關(guān)于Mysql5.6修改root密碼教程,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • MySQL關(guān)鍵字IN與EXISTS的使用與區(qū)別詳解

    MySQL關(guān)鍵字IN與EXISTS的使用與區(qū)別詳解

    in和exists是兩種常用的條件查詢關(guān)鍵字,兩種常用于子查詢,它們?cè)谀承┣闆r下可以互換使用,但它們的工作方式和效率可能會(huì)有所不同,這篇文章主要給大家介紹了關(guān)于MySQL關(guān)鍵字IN與EXISTS的使用與區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2024-09-09
  • MYSQL中 TYPE=MyISAM 錯(cuò)誤的解決方法

    MYSQL中 TYPE=MyISAM 錯(cuò)誤的解決方法

    這篇文章主要介紹了MYSQL中 TYPE=MyISAM 錯(cuò)誤的解決方法,需要的朋友可以參考下
    2014-08-08
  • mysql server 8.0.3安裝配置方法圖文教程

    mysql server 8.0.3安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql server 8.0.3安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • MySQL中CREATE DATABASE語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)的示例

    MySQL中CREATE DATABASE語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)的示例

    在MySQL中,可以使用CREATE DATABASE語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • Mysql中distinct與group by的去重方面的區(qū)別

    Mysql中distinct與group by的去重方面的區(qū)別

    distinct簡(jiǎn)單來(lái)說(shuō)就是用來(lái)去重的,而group by的設(shè)計(jì)目的則是用來(lái)聚合統(tǒng)計(jì)的,兩者在能夠?qū)崿F(xiàn)的功能上有些相同之處,但應(yīng)該仔細(xì)區(qū)分,因?yàn)橛缅e(cuò)場(chǎng)景的話,效率相差可以倍計(jì)。
    2020-03-03
  • MySQL8.0升級(jí)的踩坑歷險(xiǎn)記

    MySQL8.0升級(jí)的踩坑歷險(xiǎn)記

    聽(tīng)說(shuō)mysql8的性能提升了很多,對(duì)于我這種喜歡把所有軟件升級(jí)到最新版的人來(lái)說(shuō),二話不說(shuō)直接升級(jí),這篇文章主要給大家介紹了關(guān)于MySQL8.0升級(jí)踩坑的相關(guān)資料,需要的朋友可以參考下
    2021-10-10

最新評(píng)論