真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQLInnoDB索引的存儲結(jié)構(gòu)和分類

本篇內(nèi)容介紹了“MySQL InnoDB索引的存儲結(jié)構(gòu)和分類”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)基于成都重慶香港及美國等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)服務(wù)器托管報價,主機(jī)托管價格性價比高,為金融證券行業(yè)成都多線服務(wù)器托管,ai人工智能服務(wù)器托管提供bgp線路100M獨(dú)享,G口帶寬及機(jī)柜租用的專業(yè)成都idc公司。

InnoDB索引的數(shù)據(jù)結(jié)

InnoDB索引采用了B-Tree的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)存儲在葉子節(jié)點(diǎn)上,每個葉子節(jié)點(diǎn)默認(rèn)的大小是16KB。

當(dāng)新記錄插入到InnoDB聚簇索引中時,如果按順序插入索引記錄(升序或降序),當(dāng)達(dá)到葉子節(jié)點(diǎn)最大的容量時,下一條記錄就會寫到新的的頁中。

葉子節(jié)點(diǎn)可使用的容量為總?cè)萘康?5/16,InnoDB會留1/16的空間,以備將來插入和更新索引記錄時使用, 如果以隨機(jī)順序插入記錄,則頁面的容量為1/2到15/16之間。

你可以設(shè)置 innodb_page_size 來調(diào)整頁的大小,支持 64KB, 32KB, 16KB (默認(rèn)), 8KB, 和4KB。


索引的分類

InnoDB的索引類型分為主鍵索引和非主鍵索引。

主鍵索引的葉子節(jié)點(diǎn)存的是整行數(shù)據(jù)。在 InnoDB 里,主鍵索引也被稱為聚簇索引(clustered index)。整張表的數(shù)據(jù)其實(shí)就是存儲在聚簇索引中的,聚簇索引就是表。

如果沒有設(shè)置主鍵怎么辦呢?MySQL會自動選擇一個可以唯一標(biāo)識數(shù)據(jù)記錄的列作為主鍵,如果不存在這種列,則MySQL自動為InnoDB表生成一個隱含字段作為主鍵。

聚簇索引結(jié)構(gòu)如下圖所示:

MySQL InnoDB索引的存儲結(jié)構(gòu)和分類

非主鍵索引的葉子節(jié)點(diǎn)內(nèi)容是主鍵的值。在 InnoDB 里,非主鍵索引也被稱為二級索引(secondary index)。

二級索引的葉子節(jié)點(diǎn)中存的是主鍵的值,不是原始的數(shù)據(jù),所以二級索引找到主鍵的值之后,需要用該主鍵再去主鍵索引上查找一次,才能獲取到最終的數(shù)據(jù),這個過程叫做回表,這也是“二級”的含義。

二級索引結(jié)構(gòu)如下圖所示:

MySQL InnoDB索引的存儲結(jié)構(gòu)和分類

創(chuàng)建索引的建議

由于二級索引中保存了主鍵值,所以索引主鍵值越小越好,以免二級索引占用的空間過大,一般建議使用int的自增列作為主鍵。

這樣可以保證數(shù)據(jù)行是按順序?qū)懭氲?,對于根?jù)主鍵做關(guān)聯(lián)操作的性能也會更好。

因?yàn)橹麈I是順序的,所以每一條記錄都保存在上一條記錄的后面,當(dāng)前的頁寫滿的時候,下一條記錄就寫在新的頁中。

這樣在讀取數(shù)據(jù)的時候,就可以按順序讀取,充分利用了局部性的優(yōu)勢,大大提高了讀取效率。

自增主鍵新增數(shù)據(jù)示例:

MySQL InnoDB索引的存儲結(jié)構(gòu)和分類

建議避免使用UUID作為聚簇索引,它使得聚簇索引的插入變得完全隨機(jī),使得數(shù)據(jù)沒有任何聚集特性。

因?yàn)閁UID主鍵是隨機(jī)生成的,新的主鍵不一定比上一個主鍵大,所以無法每次都把新的主鍵插入到最后面,需要為新的主鍵尋找合適的位置,通常在已有數(shù)據(jù)的中間位置。

在頁中間插入數(shù)據(jù)需要重新分配空間,以及移動旁邊的數(shù)據(jù),這樣會導(dǎo)致頻繁的頁分裂操作同時會產(chǎn)生碎片。

UUID主鍵新增數(shù)據(jù)示例:

MySQL InnoDB索引的存儲結(jié)構(gòu)和分類

所以,聚簇索引最好用自增的列,并且要盡可能的小,這樣可以避免二級索引過大。

“MySQL InnoDB索引的存儲結(jié)構(gòu)和分類”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


文章標(biāo)題:MySQLInnoDB索引的存儲結(jié)構(gòu)和分類
本文來源:http://weahome.cn/article/gdscsi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部