mysql基本儲存單元是頁,是伺服器與磁碟互動的最小單位,預設大小16k,檢視頁大小:
show variables like
'innodb_page_size'
=>
16384
頁中儲存著多行資料,innodb引擎資料的儲存格式也就是行格式有四種:
compact
redundant
dynamic
compressed
建立表時指定行格式:
不定長字段長度列表記錄了所有列中的不定長度的列的長度列表,比如varchar(255),text,blob型別都是不定長度的,這個不定長度確切指的是位元組而非字元,所以就算是char(10),當字符集為utf8時,位元組長度在10-30之間,也是不定長的.比如有abc三個列,a型別varchar(10),b型別int(11),c型別char(10) utf8,此時不定長字段長度列表裡面就會記錄a和c列的長度分別是多少,並且逆序存放,也就是存放c a列的長度,注意,如果不定長字段值為null,那麼不會改列的長度.
null值列表
首先看有多少個可以為null的列,如果有三個的話,就以乙個位元組來表示,位元組前5位補0,後三位就代表是這三個列是否為null,值為1就是null,值為0就是非null
頭資訊
compact頭資訊是固定5個位元組組成,也就是40位,不同位有這不同的意思,如下圖所示
aabcddddeeeeeeeeeeeeefffgggggggggggggggg編號
名稱大小(位數)描述a
預留位2
暫時沒有使用
bdeleted flag
1標記此行資料是否被刪除
cmin_rec_flag
1如果是b樹的非葉子節點,每層的最小記錄(樹最左邊)節點會新增該標記
dn_owned
4每個頁中要給所有的資料行分組,分組中的最大行裡面標記當前組中有多少行,組中其他的行n_owned為0
eheap_no
13當前行在頁面堆中的相對位置
frecord_type
3表示當前記錄的型別,0位普通記錄,1為非葉子節點,2為infimum記錄,3為supremum記錄
gnext_record
16表示一下條記錄的相對位置
row_id
如果表中沒有指定主鍵,那麼會找乙個不允許為null的unique鍵做為主鍵,如果都沒有,innodb就會自己為生成乙個row_id的隱藏列作為主鍵,否則不會生成這列.
trx_id
最新對該行記錄進行更改的事務id
roll_pointer
回滾指標,指向更改之前的操作,用來事務進行回滾.
字段長度偏移列表
與compact的不定長字段長度列表的區別是,後者是逆序依次記錄變長字段的實際長度,而前者是逆序的所有列的偏移長度,比如有三個列,對應偏移量列表20 15 5
那麼第乙個欄位的長度為5第二個的為10第三個的為5(逆序取差值)
null值列表
沒有null值列表,是否為null值儲存在字段長度偏移量的各個字段值二進位制首位,為1時代表欄位為null
頭資訊
redundant頭資訊是固定6個位元組組成,也就是48位,不同位有這不同的意思,如下圖所示
aabcddddeeeeeeeeeeeeeffffffffffghhhhhhhhhhhhhhhh編號
名稱大小(位數)描述a
預留位2
暫時沒有使用
bdeleted flag
1標記此行資料是否被刪除
cmin_rec_flag
1如果是b樹的非葉子節點,每層的最小記錄(樹最左邊)節點會新增該標記
dn_owned
4每個頁中要給所有的資料行分組,分組中的最大行裡面標記當前組中有多少行,組中其他的行n_owned為0
eheap_no
13當前行在頁面堆中的相對位置
fn_field
10資料中的列的數量
g1byte_offs_flag
10代表字段長度偏移列表每個列佔2個位元組,1時佔乙個位元組
hnext_record
16表示一下條記錄的相對位置
如果列過大,如blob,varchar,text等,乙個頁都儲存不了(實際乙個頁至少要儲存兩條記錄),就要用新的頁去儲存多出來的資料,針對這種大型別,compact與redundant行格式,只會儲存該列的前768個位元組的資料以及乙個指向溢位頁(儲存列多出來的資料的頁)的位址.
show variables like
'%row_format%'
=> dynamic
與compact相比只是溢位列不再儲存前768位元組,而是只儲存溢位頁的位址
與compact相比只是溢位列不再儲存前768位元組,而是只儲存溢位頁的位址,並且會採用壓縮演算法對頁面進行壓縮.
mysql InnoDB儲存引擎
innodb的組成部分 1.後台執行緒 2.儲存引擎記憶體池 innodb儲存引擎記憶體緩衝池 1.記憶體緩衝池 innodb是基於磁碟儲存的,並將其中的記錄按照頁的方式進行管理。因此,可將其視為基礎磁碟的資料庫系統。在資料庫系統中,由於cpu速度與磁碟速度之間的紅狗,基於磁碟的資料庫系統通常使用緩...
Mysql Innodb儲存引擎
鎖 參考資料 參考資料 行鎖 innodb的鎖是對索引加鎖,如果查詢到並沒有用到索引就會對錶進行加鎖 record lock 對單條記錄加上鎖 gap lock 間隙鎖,鎖定乙個範圍,但是不包含記錄本身 next key lock record lock gap lock,鎖定乙個方位並鎖定記錄本身...
MYSQL INNODB 儲存引擎
innodb 是事務安全的mysql儲存引擎,設計上採用了類似於oracle的架構。一般而言,在oltp的應用中,innodb應該作為核心應用表的首選儲存引擎。同時,也是因為innodb的存在,才使得mysql變得更有魅力。第一 innodb儲存引擎概述 innodb由innobase oy 公司開...