InnoDB 記錄存儲結(jié)構(gòu)

InnoDB 將數(shù)據(jù)劃分為若干個頁伏尼,以頁作為磁盤和內(nèi)存之間交互的基本單位漏益,InnoDB中頁大小一般為16KB奴饮。

系統(tǒng)變量innodb_page_size表明了InnoDB存儲引擎中的頁大小薄坏,默認(rèn)值為16384字節(jié)燕偶,該變量只能在第一次初始化MySQL數(shù)據(jù)目錄指定侵浸,之后不能修改了旺韭。

InnoDB 記錄格式

COMPACT,REDUNDANT掏觉,DYNAMIC区端,COMPRESSED

可以在創(chuàng)建表指定使用的行格式

CREATE TABLE demo (
  c1 VARCHAR(10),
  c2 VARCHAR(10) NOT NULL,
  c3 CHAR(10),
  c4 VARCHAR(10)
) CHARSET=ascii ROW_FORMAT=COMPACT;

或者修改表的語句中指定使用的行格式

ALTER TABLE 表名 ROW_FORMAT=行格式名稱;
COMPACT 格式
image.png

先插入2組數(shù)據(jù):

SELECT * FROM demo;
+---------+---------+---------+---------+
|  c1         c2        c3       c4     |
+---------+---------+---------+---------+
| aaaa       bbb        cc       d      |
| eeee       fff        NULL     NULL   |
+---------+---------+---------+---------+
  • 變長字段長度列表
    MySQL 支持一些變長的數(shù)據(jù)類型,比如VARCHAR澳腹,VARBINARY织盼,各種TEXT類型,各種BLOB類型酱塔。這些數(shù)據(jù)列我們稱之為變長字段沥邻。變長字段中存儲多少字節(jié)的數(shù)據(jù)是不固定的,所以我們在存儲真實數(shù)據(jù)的時候需要順便把這些數(shù)據(jù)占用的字節(jié)數(shù)也存儲起來羊娃。

    compact 行格式中唐全,將其放在放在 變長字段長度列表中,各變長字段的真實數(shù)據(jù)占用按照列的順序逆序存放蕊玷。

    變長字段列為 c1 c2 c4邮利,按照列的順序逆序存放,所以第一條記錄的變長字段長度就是:01 03 04

    image.png
  • NULL 值列表
    一條記錄中某些列可能存儲NULL值垃帅,如果把這些NULL值都放到記錄的真實數(shù)據(jù)中存儲會很占地方延届,COMPACT 行格式把一條記錄中值為NULL的列統(tǒng)一管理起來,存儲到NULL值列表中贸诚,它的處理過程如下:

    • 首先統(tǒng)計表中允許存儲NULL的列有哪些 方庭?
      主鍵列以及使用NOT NULL修飾的列都是不可以存儲 NULL 的值,所以在統(tǒng)計時不會把這些列算進(jìn)去酱固。上面就是c1械念,c3,c4列媒怯。

    • 如果表中沒有允許存儲NULL的列订讼,則NULL值列表也就不存在了,否則將每個允許存儲NULL的列對應(yīng)一個二進(jìn)制位扇苞,二進(jìn)制位為1表示該列的值為NULL欺殿,否則表示不為NULL寄纵。同時MySQL 規(guī)定NULL值列表必須用整數(shù)各字節(jié)的位表示,如果使用的二進(jìn)制位個數(shù)不是整數(shù)個字節(jié)脖苏,則在字節(jié)的高位補(bǔ)0


      image.png

      所以上面的2條記錄NULL 值列表如下:

      image.png
  • 記錄頭信息
    記錄頭信息由固定的 5 字節(jié)組成程拭,用于描述記錄的一些屬性。

    名稱 大小 描述
    預(yù)留位1 1 沒有使用
    預(yù)留位2 1 沒有使用
    deleted_flag 1 標(biāo)記該記錄是否被刪除
    min_re_flag 1 B+樹的每層非葉子節(jié)點(diǎn)中最小的目錄項都會添加該標(biāo)記
    n_owned
    heap_no
    record_type
    next_record
  • 記錄的真實數(shù)據(jù)
    對于表來說棍潘,記錄的真實數(shù)據(jù)除了自己定義的外恃鞋,MySQL還會為每個記錄默認(rèn)添加一些列(也稱為隱藏列)。

    名稱 是否必需 占用空間 描述
    row_id 6字節(jié) 行ID亦歉,唯一標(biāo)識一條記錄
    trx_id 6字節(jié) 事務(wù)ID
    roll_pointer 7字節(jié) 回滾指針
    • InnoDB 主鍵生成策略
      • 優(yōu)先使用用戶自定義的主鍵為主鍵恤浪。
      • 如果用戶沒有定義主鍵,則選取一個不允許存儲 NULL 值的 UNIQUE 健作為主鍵肴楷。
      • 如果表中連不允許存儲 NULL 值的 UNIQUE 健都沒有水由,則InnoDB則會為表默認(rèn)添加一個row_id的隱藏列作為主鍵。
  • CHAR(M)列的存儲格式
    對于CHAR(M)類型的列來說赛蔫,當(dāng)列采用的是定長編碼的字符集時砂客,該列占用的字節(jié)數(shù)不會被加到變長字段長度列表中,但是如果采用變長編碼的字符集時呵恢,該列占用的字節(jié)數(shù)還是會被加到變長字段長度列表鞠值。

  • 溢出列

REDUNDANT

過時了,這里不分析渗钉。

DYNAMIC

DYNAMIC彤恶, COMPRESSED和 COMPACT 格式挺像的,只不過在處理溢出列的時候晌姚。

COMPRESSED

不同于DYNAMIC粤剧,COMPRESSED 行格式會采用壓縮算法對頁面進(jìn)行壓縮,以節(jié)省空間挥唠。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抵恋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子宝磨,更是在濱河造成了極大的恐慌弧关,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唤锉,死亡現(xiàn)場離奇詭異世囊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)窿祥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門株憾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事嗤瞎∏酵幔” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵贝奇,是天一觀的道長虹菲。 經(jīng)常有香客問我,道長掉瞳,這世上最難降的妖魔是什么毕源? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮陕习,結(jié)果婚禮上霎褐,老公的妹妹穿的比我還像新娘。我一直安慰自己衡查,他們只是感情好瘩欺,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拌牲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歌粥。 梳的紋絲不亂的頭發(fā)上塌忽,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機(jī)與錄音失驶,去河邊找鬼土居。 笑死,一個胖子當(dāng)著我的面吹牛嬉探,可吹牛的內(nèi)容都是我干的擦耀。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼涩堤,長吁一口氣:“原來是場噩夢啊……” “哼眷蜓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胎围,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤吁系,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后白魂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汽纤,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年福荸,在試婚紗的時候發(fā)現(xiàn)自己被綠了蕴坪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡敬锐,死狀恐怖背传,靈堂內(nèi)的尸體忽然破棺而出捆等,到底是詐尸還是另有隱情,我是刑警寧澤续室,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布栋烤,位于F島的核電站,受9級特大地震影響挺狰,放射性物質(zhì)發(fā)生泄漏明郭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一丰泊、第九天 我趴在偏房一處隱蔽的房頂上張望薯定。 院中可真熱鬧,春花似錦瞳购、人聲如沸话侄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽年堆。三九已至,卻和暖如春盏浇,著一層夾襖步出監(jiān)牢的瞬間变丧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工绢掰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痒蓬,地道東北人。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓滴劲,卻偏偏與公主長得像攻晒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子班挖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容