www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]在InnoDB的數(shù)據(jù)頁到底長什么樣?這篇文章里,我們講了InnoDB數(shù)據(jù)頁長什么樣,簡單回顧下。圖1?InnoDB數(shù)據(jù)頁結(jié)構(gòu)示意圖(圖片來自網(wǎng)絡(luò))其中有的部分沒有詳細講解,因為暫時還用不到。比如PageDirectory頁目錄。上面講了數(shù)據(jù)頁的內(nèi)部結(jié)構(gòu),數(shù)據(jù)庫最終所有的數(shù)據(jù)都是要...

在InnoDB的數(shù)據(jù)頁到底長什么樣?這篇文章里,我們講了InnoDB數(shù)據(jù)頁長什么樣,簡單回顧下。

深入理解為什么MySQL全表掃描很慢?

圖1?InnoDB數(shù)據(jù)頁結(jié)構(gòu)示意圖(圖片來自網(wǎng)絡(luò))


其中有的部分沒有詳細講解,因為暫時還用不到。比如Page Directory頁目錄。


上面講了數(shù)據(jù)頁的內(nèi)部結(jié)構(gòu),數(shù)據(jù)庫最終所有的數(shù)據(jù)都是要放到磁盤上去的,那么大量的數(shù)據(jù)頁在磁盤上是怎么存儲的呢?其實數(shù)據(jù)頁之間會通過雙向鏈表連接起來。

深入理解為什么MySQL全表掃描很慢?

圖2 數(shù)據(jù)頁雙向鏈表連接起來


內(nèi)存中的雙向鏈表大家都能理解,那么磁盤上的雙向鏈表是怎么搞的呢?


其實,數(shù)據(jù)頁在磁盤上就是一段數(shù)據(jù),里面包含的兩個指針,一個指向自己上一個數(shù)據(jù)頁的物理地址,一個指向下一個數(shù)據(jù)頁的物理地址。


每個數(shù)據(jù)頁內(nèi)部的User Records行記錄部分會存儲一行一行的數(shù)據(jù),這些行數(shù)據(jù)會按照逐漸的大小進行排序存儲,每一行數(shù)據(jù)都有一個指針指向下一行數(shù)據(jù)的位置,組成單向鏈表。

深入理解為什么MySQL全表掃描很慢?

圖3 數(shù)據(jù)頁在磁盤文件里的物理存儲結(jié)構(gòu)


數(shù)據(jù)頁的頁目錄是個重要的東西,目錄的作用就是方便檢索。這里的目錄,同樣有這樣的作用。


頁目錄里有很多個槽位(slots),這個槽位對應(yīng)一組數(shù)據(jù),可以理解為真實數(shù)據(jù)與頁面中第0個字節(jié)之間的偏移量。每個槽中,存放著每個組里最大的那條記錄所在頁面中的地址偏移量。


頁目錄就存放的是主鍵與槽位的映射關(guān)系,如圖:

深入理解為什么MySQL全表掃描很慢?

圖4?頁目錄


所以說,如果你要根據(jù)主鍵查找一條數(shù)據(jù),假設(shè)你表里沒幾條數(shù)據(jù),那個表就一個數(shù)據(jù)頁,那就直接在數(shù)據(jù)頁里根據(jù)主鍵二分查找。


通過二分查找在目錄里迅速定位到逐漸對應(yīng)的數(shù)據(jù)在哪個槽位里,然后到那個槽位里去,遍歷槽位里的每一行數(shù)據(jù),就能找到那個主鍵對應(yīng)的數(shù)據(jù)了。


如果你沒辦法使用主鍵查詢,只能進到數(shù)據(jù)頁里,逐條數(shù)據(jù)遍歷查找了。


如果數(shù)據(jù)頁里有很多的數(shù)據(jù)頁,該如何查找呢?


假設(shè)你沒有建立任何索引,只能從第一個數(shù)據(jù)頁開始遍歷所有的數(shù)據(jù)頁,從第一個數(shù)據(jù)頁開始,把每個數(shù)據(jù)也從磁盤加載到buffer pool的緩存頁里去。


如果你是根據(jù)主鍵查找,你可以在數(shù)據(jù)頁的頁目錄里二分查找,如果是根據(jù)其他字段查找,就需要在數(shù)據(jù)頁里順著單鏈表遍歷了。


這個過程,其實就是全表掃描!


你在沒有任何所以的時候,查找數(shù)據(jù)就是一個全表掃描的過程,就是根據(jù)雙向鏈表把磁盤上的數(shù)據(jù)頁加載到磁盤的緩存頁里去,然后在緩存頁內(nèi)部查找那條數(shù)據(jù)。


這個過程是非常滿的,所以說當(dāng)數(shù)據(jù)量大的時候,全表掃描性能非常低,應(yīng)該盡量避免全表掃描。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉
關(guān)閉