前文: 關于MYSQL INNODB index page header學習和實驗總結 http://blog.itpub.net/7728585/viewspace-2063921/ 關于INNODB SYSTEM RECORD infimum和supremum的學習和實驗研究 http://blog.itpub.net/7728585/viewspace-2065464/
variable field lengths (1-2 bytes* var ) nullable field bitmap (1 bit * null field) info flags (4 bits) number of records owned (4 bits) order (13 bits) record type (3 bits) next record offset (2 bytes) offset ----cluster key fields (N bytes) transaction id (6 bytes) roll pointer (7 bytes) non-key fields (M bytes)
1、variable field lengths 每個可變長度的變量類型存儲一個長度如varchar,對于固定長度的比如INT不記錄。 如果不存在可變長度的變量類型,至少占用一個字節為00。 2、nullable field bitmap 每個NULL值占用一個一位(bit),如果不滿一個字節按一個字節算,如果不存在NULL值 至少占用一個字節為00。 3、info flags 這4位(4bits)標示是一個行標識,其中binary 0001表示非葉節點最小的行 其中binary 0010表示是刪除的行,而infimum和supremum行在我測試數據庫中為binary 0000 4、number of records owned 這4位(4bits)表示在本page directory(槽)中的記錄數,關于槽的概念后面詳細探討 5、order 這13位(13bits)表示記錄插入到塊中順序,INFIMUM恒等于0而SPREMUM恒等于1,而數據行的ORDER從2開始,這里的order 我實驗得出的結論為實際物理空間的順序 6、record type 這3位(3bits)表示記錄的類型,supermum恒等于3及binary 011,infimum恒等于2及binary010,節點指針為1及001,數據行為000 7、next record offset 這2個字節是按照CLUSTER KEY值排序的,也就是說他的順序和order沒有任何聯系,order是插入的順序 在INFIMUM中表示的是第一個行的偏移量這個偏移量是當前記錄的位置+offset,這個offset直接指向了數據而相關的行頭在offset-n開始n為行頭的開銷。 當然supermum為的偏移量就是NULL空指針了。 8、cluster key fields 這N個字節代表主鍵字節數,沒有就是ROWID占用6字節 9、transaction id 這6個字節為最后一次修改本行的事物ID 10、roll pointer 這7個字節是用于支持MVCC多版本的回退指針, 1bit 標識 7bit 回退段ID 4bytes 回滾段頁號 2bytes 回滾段頁的偏移量 這幾位在討論MVCC的時候詳細研究 11、non-key fields 也就是M個字節的非主鍵字段的數據了。