InnoDB行記錄格式總結

2021-09-24 19:05:40 字數 1331 閱讀 5900

在早期的innodb版本中,由於檔案格式只有一種,但隨著innodb引擎的發展,開發出了相容早期版本的新檔案格式,用於支援新的功能,因此innodb開始使用命名的檔案格式

compact

變長字段列表

null標誌位

記錄頭資訊

column1資料

column2資料

額外資料

變長字段長度列表:如果定義長度小於128位元組或者小於256位元組且型別不是blob,那麼這個欄位的資料長度就用乙個位元組來儲存,除了上面兩種情況之外,都用兩個位元組來儲存;

null標識位:該位指示了該行資料中是否有null值,有則用1來標識;

記錄頭資訊:固定占用50位元組;

cloumnn資料:實際儲存每列的資料,null不佔該部分任何空間,即null占有null標誌位,實際儲存不佔任何空間

ps:每一行資料除了使用者定義的例外,還有兩個隱藏列,事務id列和回滾指標列,分別為6位元組和7位元組的大小,若innodb表沒有定義主鍵,每行還會增加乙個6位元組的rowid列

2、redundant(mysql5.0之前的行記錄格式)

字段便宜列表

記錄頭資訊

rowid

事務id

回滾指標

列1列2

列n欄位偏移列表:同樣是按照列的順序逆序放置的,若列的長度小於255位元組,用一位元組表示,若大於255位元組,用2位元組表示;

記錄頭資訊:占用6位元組

3、行溢位資料

當行記錄的長度沒有超過記錄最大長度時,所有資料都會 儲存在當前頁;

當行記錄的長度超過行記錄最大長度時,變長列會選擇外部溢位頁進行儲存;

對於compact和redundant,保留前768位元組在當前頁,其餘資料存放在溢位頁768位元組後面跟著20位元組的資料,用來儲存指向溢位頁的指標

4、對於compact和redundant行格式,innodb將變長字段(varchar varbinary blob text)的前786位元組儲存在b+樹節點中,其餘的資料存放在溢位頁,

5、compressed和dynamic

innodb1.0開始引入新的檔案格式,這個新的格式擁有兩種新的行記錄格式:compressed和dynamic,新的兩種記錄格式對於存放blob中的資料採用了完全的行溢位的方式:

dynamic行格式,列儲存是否放到off-page頁,主要取決於行大小,他會把行中最長的一列放到off-page中,直到資料頁能存放下兩行;

compressed物理結構上與dynamic類似,compressed行記錄格式的另乙個功能就是儲存在其中的行資料會議zlib的演算法進行壓縮,因此對於blob text varchar這類大長度資料能夠進行有效的儲存(減少40%,但對cpu要求更高)

mysql行格式 MySQL 行格式

以 mysql 預設的儲存引擎 innodb 為例 innodb 包含以下四種行格式 compact redundant dynamic compressed 指定行格式 create table 表名 列的資訊 row format 行格式名稱 alter table 表名 row format ...

innodb檔案格式

引數innodb file format定義了檔案格式 oracle建議使用barracuda,5.6預設是antelope是原本的檔案格式,支援compact和redundant行格式。主要是為了相容之前版本的複製配置。barracuda是最新的檔案格式,支援所有的行格式,包括compressed...

mysql 設定行格式 mysql行格式

最近用phpmyadmin,突然發現有個引數row format,以下是手冊中的解答部分,看了之後水平又提公升了,做個記錄。另外看了這部分之後發現原來mysql儲存變長資料的方法和檔案系統原來一樣啊,都是資料和索引分離,然後一堆碎片和鏈結,哈哈。紅色標出的部分比較重要,很少有人會去關注,提醒大家看下...