【MySQL(十)】Innodb 行結構

以Innodb引擎爲例。

mysql數據邏輯上是一行一行存放的,物理上,則是以頁單位存放的,頁也是mysql操作的基本單位。一頁大小一般是16kb。

下面看下頁內具體一行數據的模型,也就是Innodb的行模式。共有四種:CompactRedundantDynamicCompressed。

以Compact爲例:

(本篇圖片全部來自掘金小冊中《MySQL是怎樣運行的》一書)

大致可以分爲兩塊:數據區和必要信息;

必要信息:主要包括變長字段長度列表和null值列表,以及一些頭信息。

變長字段長度列表:一些列是變長的,因爲字符集可能是變長的,或者列的數據類型比如blob或者varchar這種,對於這樣的數據列的值,innodb存儲時肯定需要具體的數據長度,這個長度就是存在變長字段長度列表裏的;

null值列表:可空列如果沒有數據,innodb不會在記錄裏存一個null,而是將其記錄在null值列表中,這個列表本質上是通過字節的bit位來代表空列的,每一個bit位對應一個可空的列,用0和1表示是否爲空。

頭信息:

(本篇圖片全部來自掘金小冊中《MySQL是怎樣運行的》一書)

剩下就是真實記錄部分了。真實記錄處理存儲各個列的值外,innodb還會分配隱藏列:rowid,trxid以及rollbackPointer。

rowid:可選,如果沒有指定主鍵時,innodb會隱式分配一個自增主鍵;

trxid:最後修改該行數據的trxid;

rollbackPointer:回滾段指針;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章