网站黄色在线观看视频,男人和女人操逼有免费的视频吗2018高清,91熟女丨老女人丨高潮丰满,丝袜高潮流白浆潮喷在线播放

中國站

中國站

國際版

聯(lián)系我們

400-002-9968

售前咨詢

售后服務(wù)

注冊 登錄

博客 > MySQL知識:MySQL InnoDB索引的存儲結(jié)構(gòu)

MySQL知識:MySQL InnoDB索引的存儲結(jié)構(gòu)

  • 標(biāo)簽:
  • MySQL
  • InnoDB索引
  • MySQL索引

瀏覽量:2599次評論:0次

作者:銳成網(wǎng)絡(luò)整理時間:2024-08-12 17:15:56

InnoDB索引的數(shù)據(jù)結(jié)構(gòu)

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

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

MySQL知識:MySQL InnoDB索引的存儲結(jié)構(gòu)

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

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

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

MySQL知識:MySQL InnoDB索引的存儲結(jié)構(gòu)

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

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

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

因為主鍵是順序的,所以每一條記錄都保存在上一條記錄的后面,當(dāng)前的頁寫滿的時候,下一條記錄就寫在新的頁中。

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

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

MySQL知識:MySQL InnoDB索引的存儲結(jié)構(gòu)

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

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

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

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

MySQL知識:MySQL InnoDB索引的存儲結(jié)構(gòu)

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

重要聲明:本文來自編程我也會,經(jīng)授權(quán)轉(zhuǎn)載,版權(quán)歸原作者所有,不代表銳成觀點(diǎn),轉(zhuǎn)載的目的在于傳遞更多知識和信息。

我的評論

還未登錄?點(diǎn)擊登錄

微信掃碼溝通
微信掃碼溝通

微信掃碼溝通

AI
return head