程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> [MySQL]InnoDB行格式剖析

[MySQL]InnoDB行格式剖析

編輯:MySQL綜合教程


[MySQL]InnoDB行格式剖析

InnoDB和大多數行式數據庫一樣,記錄以行的格式存儲,它提供了兩種格式:Compact和Redundant

Compact
Compact格式是在MySQL5.0時才被引入,它是新的行格式,其設計目標是高效存放數據,示意圖如下:



1)變長字段長度列表。按列的逆序放置,當列長度小於255字節,用1字節表示,若大於255字節,用2個字節表示,至多為2字節(這也很好解釋了InnoDB中varchar的最大長度為什麼是65535,因為2個字節為16位,2的16次方-1)。注意,對於固定長度字段(如char),是不需要記錄其長度的。
2)NULL標志位。指示該行中的列是否為NULL,1表示NULL。
3)記錄頭信息。固定占用5個字節(40位),每位代表的含義如下表所示:



4)最後就是實際存儲的該行每列的數據了,注意:NULL不在該部分中占用存儲。
5)此外還有兩個隱藏部分,分別存放事務ID和回滾指針,大小分別為6字節和7字節,如果表沒有定義主鍵,每行還會自動增加6字節的ROWID。

Redundant
Redundant是MySQL5.0之前InnoDB的行記錄存儲格式,其示意圖如下:



1)字段長度偏移列表。同樣按列的逆序放置,當列長度小於255字節,用1字節表示,若大於255字節,用2個字節表示。
2)記錄頭信息。固定占用6個字節(48位),每位含義見下表:



3)最後部分是實際存儲各個列數據。
4)和Compact一樣,還有兩個隱藏部分,分別存放事務ID和回滾指針,大小分別為6字節和7字節,如果表沒有定義主鍵,每行還會自動增加6字節的ROWID。

Redundant和Compact最大的不同是對Char類型NULL值的處理,Redundant會實際存儲NULL值,占Char類型固定長度空間,而Compact不占用空間,這也是Compact能寸更多記錄的原因之一。注意:對於varchar類型,不管是Compact還是Redundant都不存儲NULL值。

Compressed和Dynamic
InnoDB Plugin引入了新的文件格式,稱為Barracuda(之前的Compact和Redundant稱為Antelope),擁有兩種權限的記錄格式Compressed和Dynamic。這裡就不詳細介紹它們了,有興趣的童鞋可以自行研究下。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved