Innodb中存儲空間管理的最小單位是頁,頁的默認空間是16KB,每個頁中存放了數據。頁與頁之間是通過雙向鏈表來連接的。索引頁中的數據都會按照主鍵的值從小到大排列並用單向鏈表連接起來。
我們先說說在沒有索引的情況下是怎么查找一條記錄的。 因為每個頁中數據都是沒有規律的,所以我們不得不遍歷所有的頁來得到這條數據。這樣查詢的效率就會很低。所以需要為記錄生成一個目錄頁來記錄這些數據。
在建立目錄的過程中規定了下一個數據頁的主鍵值必須大於上一個數據頁的主鍵值。當一個頁中的數據超出了范圍了就產生一個新的頁存放,這個過程會產生頁分裂,數據的移動,比如主鍵值小的會跑去上一個頁,主鍵值大的往后一個頁移動。
2,0,3這些是頁的頭信息,2表示的是最小記錄,0表示普通記錄,3表示的是最大記錄,還有就是如果是1的話表示的是目錄項記錄

但是問題來了,頁與頁之間可能並不是相鄰的,也就是說可能上一個頁的頁號是10,下一個頁的頁號是20,但是這些頁之間是通過雙向鏈表來進行連接的。那么怎么去快速訪問到特定的頁號呢,答案就是再為每個目錄頁再建立一個目錄項:

每一個目錄項中包含了兩個內容,一個是目錄頁中的最小主鍵值,另一個是頁目錄號就是頁號。這樣就可以快速的根據主鍵值定位到一條記錄。這種目錄項就叫做索引
參考文獻:《MySql是怎樣運行的:從跟上理解MySQL》