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

MySQL索引底層數(shù)據(jù)結(jié)構(gòu)詳情

 更新時(shí)間:2021年12月12日 14:31:11   作者:bkpp976  
這篇文章主要介紹了MySQL索引底層數(shù)據(jù)結(jié)構(gòu)詳情,下面文章圍繞MySQL索引底層數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料展開全篇文章,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

一、索引類型

1.B+樹

為什么是B+樹而不是B樹?

首先看看B樹和B+樹在結(jié)構(gòu)上的區(qū)別

B樹結(jié)構(gòu):

B+樹:

可以看到:

  • B樹在每個(gè)節(jié)點(diǎn)上都有衛(wèi)星數(shù)據(jù)(數(shù)據(jù)表中的一行數(shù)據(jù)),而B+樹只在葉子節(jié)點(diǎn)上有衛(wèi)星數(shù)據(jù)。這意味著相同大小的磁盤扇區(qū),B+樹可以存儲(chǔ)的葉子節(jié)點(diǎn)更多,磁盤IO次數(shù)更少;同樣也意味著B+樹的查找效率更穩(wěn)定,而B樹數(shù)據(jù)查詢的最快時(shí)間復(fù)雜度是O(1)。
  • B樹的每個(gè)節(jié)點(diǎn)只出現(xiàn)一次,B+樹的所有節(jié)點(diǎn)都會(huì)出現(xiàn)在葉子節(jié)點(diǎn)中。B+樹的所有葉子節(jié)點(diǎn)形成一個(gè)升序鏈表,適合區(qū)間范圍查找,而B樹則不適合。

2.MyISAM和InnoDB的B+樹索引實(shí)現(xiàn)方式的區(qū)別(聚簇索引和非聚簇索引)?

首先需要了解聚簇索引和非聚簇索引。

聚簇索引:

在聚簇索引中,葉子頁(yè)包含了行的全部數(shù)據(jù),節(jié)點(diǎn)頁(yè)值包含索引列。InnoDB通過(guò)主鍵聚集數(shù)據(jù),如果沒(méi)有定義主鍵則選擇一個(gè)唯一的非空索引列代替;如果沒(méi)有這樣的索引,InnoDB會(huì)隱式定義一個(gè)主鍵來(lái)作為聚簇索引。

聚簇索引的數(shù)據(jù)分布:

?在聚簇索引中,除了主鍵索引,還有二級(jí)索引。二級(jí)索引中的葉子節(jié)點(diǎn)存儲(chǔ)的不是“行指針”,而是主鍵值,并以此作為指向行的“指針”。這意味著通過(guò)二級(jí)索引查找行,存儲(chǔ)引擎需要找到二級(jí)索引的葉子節(jié)點(diǎn)獲得對(duì)應(yīng)的主鍵值,然后根據(jù)這個(gè)值去聚簇索引中查找對(duì)應(yīng)的行,也稱為“回表”。當(dāng)然,可以通過(guò)覆蓋索引避免回表或者InnoDB的自適應(yīng)索引能夠減少這樣的重復(fù)工作。

注意:聚簇索引中每一個(gè)葉子節(jié)點(diǎn)不止包含完整的數(shù)據(jù)行,還包括事務(wù)ID、用于事務(wù)和MVCC的回滾指針。

3.非聚簇索引

非聚簇索引的主鍵索引和二級(jí)索引在結(jié)構(gòu)上沒(méi)有什么不同,都在葉子節(jié)點(diǎn)上存儲(chǔ)指向數(shù)據(jù)的物理地址的“行指針”。

聚簇索引的主鍵索引和二級(jí)索引:

非聚簇索引的主鍵索引和二級(jí)索引:

4.聚簇索引的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

把相關(guān)數(shù)據(jù)保存在一起(比如用用戶ID把用戶的全部郵件聚集在一起),否則每次數(shù)據(jù)讀取就可能導(dǎo)致一次磁盤IO
數(shù)據(jù)訪問(wèn)更快,把索引和數(shù)據(jù)保存在同一個(gè)B+樹中,通常在聚簇索引中獲取數(shù)據(jù)比在非聚簇索引中查找更快
使用覆蓋查詢可以直接利用頁(yè)節(jié)點(diǎn)中的主鍵值

缺點(diǎn):

如果所有數(shù)據(jù)都可以放在內(nèi)存中,順序訪問(wèn)不再那么必要,聚簇索引沒(méi)有優(yōu)勢(shì)
插入速度依賴于插入順序,隨機(jī)插入會(huì)導(dǎo)致頁(yè)分裂,造成空洞,使用OPTIMIZE TABLE重建表
每次插入、更新、刪除都需要維護(hù)索引的變化,代價(jià)很高
二級(jí)索引可能比想象中大,因?yàn)樵诠?jié)點(diǎn)中包含了引用行的主鍵列

5.哈希索引

哈希索引基于哈希表實(shí)現(xiàn),只有精確匹配索引所有列的查詢才有效,這意味著,哈希索引適用于等值查詢。

具體實(shí)現(xiàn):對(duì)于每一行數(shù)據(jù),存儲(chǔ)引擎都會(huì)對(duì)所有的索引列計(jì)算一個(gè)哈希碼,哈希索引將所有的哈希碼存儲(chǔ)在索引中,同時(shí)在哈希表中保存指向每個(gè)數(shù)據(jù)行的指針。

在MySQL中,只有Memory引擎顯式支持哈希索引,當(dāng)然Memory引擎也支持B樹索引。

注意:Memory引擎支持非唯一哈希索引,解決沖突的方式是以鏈表的形式存放多個(gè)哈希值相同的記錄指針。

6.自適應(yīng)哈希索引

InnoDB注意到某些索引值被使用得非常頻繁時(shí),會(huì)在內(nèi)存中基于B+樹索引之上再創(chuàng)建一個(gè)哈希索引,這樣就讓B+樹索引也具有哈希索引的一些優(yōu)點(diǎn),比如快速的哈希查找。

到此這篇關(guān)于MySQL索引底層數(shù)據(jù)結(jié)構(gòu)詳情的文章就介紹到這了,更多相關(guān)MySQL索引底層數(shù)據(jù)結(jié)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySql CPU激增原因小結(jié)

    MySql CPU激增原因小結(jié)

    本文主要介紹了MySQL CPU激增的原因和解決方法,包括QPS激增、慢SQL和大量空閑連接導(dǎo)致的CPU升高,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Centos 6.3將Mysql 5.1.61升級(jí)為mysql 5.6.19遇到的問(wèn)題及解決方式

    Centos 6.3將Mysql 5.1.61升級(jí)為mysql 5.6.19遇到的問(wèn)題及解決方式

    mysql5.6.19已經(jīng)發(fā)布很久了,一直沒(méi)有去升級(jí),最近做項(xiàng)目需要mysql5.5以上,索性直接上5.6.19吧,原本以為升級(jí)這種事情,分分鐘就完成了,沒(méi)想到還是出了各種問(wèn)題,下面把部分記錄分享給大家
    2014-07-07
  • MYSQL查詢時(shí)間范圍內(nèi)的數(shù)據(jù)示例代碼

    MYSQL查詢時(shí)間范圍內(nèi)的數(shù)據(jù)示例代碼

    這篇文章主要介紹了MYSQL查詢時(shí)間范圍內(nèi)的數(shù)據(jù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • 關(guān)于MySQL存取圖片的三種方式(含源碼示例)

    關(guān)于MySQL存取圖片的三種方式(含源碼示例)

    最近在做小程序的后臺(tái),要求將小程序用戶以u(píng)pload方法上傳的圖片保存到mysql數(shù)據(jù)庫(kù)中,然后機(jī)緣巧合三種方式都試了,所以專門整理出來(lái)分享給大家,可能有的地方說(shuō)的不太對(duì),歡迎大家?guī)图m正,需要的朋友可以參考下
    2024-04-04
  • mysql分頁(yè)原理和高效率的mysql分頁(yè)查詢語(yǔ)句

    mysql分頁(yè)原理和高效率的mysql分頁(yè)查詢語(yǔ)句

    這篇文章主要介紹了mysql分頁(yè)原理和高效率的mysql分頁(yè)查詢語(yǔ)句,大家參考使用吧
    2014-01-01
  • mysql data文件夾位置查找

    mysql data文件夾位置查找

    在mysql安裝之后,如何找到自己的mysql數(shù)據(jù)庫(kù)的安裝位置,本文將介紹詳細(xì)的解決方法,需要的朋友可以參考下
    2012-12-12
  • 查看連接mysql的IP地址的實(shí)例方法

    查看連接mysql的IP地址的實(shí)例方法

    在本篇文章里小編給大家分享的是一篇關(guān)于查看連接mysql的IP地址的實(shí)例方法,有需要的朋友們可以參考下。
    2020-10-10
  • SQL實(shí)現(xiàn)LeetCode(196.刪除重復(fù)郵箱)

    SQL實(shí)現(xiàn)LeetCode(196.刪除重復(fù)郵箱)

    這篇文章主要介紹了SQL實(shí)現(xiàn)LeetCode(196.刪除重復(fù)郵箱),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 淺談MySql整型索引和字符串索引失效或隱式轉(zhuǎn)換問(wèn)題

    淺談MySql整型索引和字符串索引失效或隱式轉(zhuǎn)換問(wèn)題

    本文主要介紹了MySql整型索引和字符串索引失效或隱式轉(zhuǎn)換問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • MYSQL如何查看進(jìn)程和kill進(jìn)程

    MYSQL如何查看進(jìn)程和kill進(jìn)程

    這篇文章主要介紹了MYSQL如何查看進(jìn)程和kill進(jìn)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評(píng)論

佛教| 河源市| 潢川县| 正宁县| 锡林郭勒盟| 平陆县| 西平县| 沈阳市| 唐河县| 韶关市| 库车县| 建湖县| 扶绥县| 尉犁县| 陇西县| 贵阳市| 普宁市| 西安市| 西昌市| 十堰市| 留坝县| 闻喜县| 门源| 肥东县| 柳江县| 离岛区| 黄冈市| 遂溪县| 灌阳县| 肃南| 信宜市| 灌云县| 伊吾县| 竹北市| 临海市| 凯里市| 台东市| 吉林市| 吉首市| 克什克腾旗| 阆中市|