中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql-innodb行記錄格式

發布時間:2020-08-07 17:33:26 來源:ITPUB博客 閱讀:270 作者:liangjiahual 欄目:MySQL數據庫
cdn.shimo.im/wLa8Ccuo2bAFpz1G/image.png!thumbnail"},"29:1|30:0|3:."613px."|4:."73.275px."|7:1|crop:."."|frame:."none."|ori-height:."104."|ori-width:."870.""],[20,"首部是字段長度偏移列表,按照列的順序逆序放置,其長度為(若列的長度小于255字節,用1字節表示;若大于255個字節,用2字節表示)"],[20,".n","text-indent:."1.""],[20,"記錄頭信息:占用6字節,含義如圖:"],[20,".n","text-indent:."1.""],[20,{"gallery-block":"https://images-cdn.shimo.im/RrR00mMkB0E9w1FP/image.png!thumbnail"},"29:1|30:0|3:."613px."|4:."215.738px."|7:1|crop:."."|frame:."none."|ori-height:."353."|ori-width:."1003.""],[20,"說明:n_fields值代表一行中列的數量,mysql一行中最多的列為1023;1byte_offs_flag:定義了偏移列表占用1字節還是2字節。.n最后部分即為實際存儲的每個列的數據"],[20,".n","text-indent:."1.""],[20,"注意:對于varchar類型的NULL值,不占用任何存儲空間,而char類型的NULL值需要占用空間.n"],[20,"compact,5.0.3以后默認行格式","27:."12."|8:1"],[20,".n","text-indent:."1.""],[20,{"gallery-block":"https://images-cdn.shimo.im/TWwEzwRWPCYq30ni/image.png!thumbnail"},"29:1|30:0|3:."613px."|4:."74.0625px."|7:1|crop:."."|frame:."none."|ori-height:."116."|ori-width:."960.""],[20,"說明:.n首部是一個"],[20,"非NULL變長字段","8:1"],[20,"長度列表,且按照列的順序逆序放置,其長度為(若列的長度小于255字節,用1字節表示;若大于255個字節,用2字節表示)"],[20,".n","text-indent:."1.""],[20,"NULL標志位:該行數據是否有NULL值,有則用1表示,占用1個字節"],[20,".n","text-indent:."1.""],[20,"記錄頭信息:固定占用5字節,含義如圖:"],[20,".n","text-indent:."1.""],[20,{"gallery-block":"https://images-cdn.shimo.im/WYtqxD4zit0IzMK6/image.png!thumbnail"},"29:1|30:0|3:."613px."|4:."217.913px."|7:1|crop:."."|frame:."none."|ori-height:."353."|ori-width:."993.""],[20,"說明:通過record_type分析可得,在innodb存儲引擎中"],[20,"頁內部是通過一種鏈表的結構來串連各個行記錄的","8:1"],[20,"。.n最后的部分為實際存儲每個列的數據(注:1.不管是char類型還是varchar類型,NULL不占該部分任何空間,只占有NULL標志位;2.固定長度char字段在未能完全占用其長度空間時,會用Ox20來進行填充)"],[20,".n","text-indent:."1.""],[20,"每行數據除了用戶定義的列外,還有兩個隱藏列(事務ID(DB_TRX_ID)6字節,回滾指針列(DB_ROLL_PTR),7字節),若沒有定義主鍵,還會增加一個rowid(DB_ROW_ID)6字節"],[20,".n","text-indent:."1.""],[20,"Antelope文件格式包括compact和Redundant行記錄格式.nBarracuda文件格式包括dynamic和compressed行記錄格式.n"],[20,".n","text-indent:."1.""],[20,"行溢出數據","27:."12."|8:1"],[20,".ncompact和redundant存放BLOB的行溢出數據存儲格式如圖:.n"],[20,{"gallery-block":"https://images-cdn.shimo.im/k5zhzI2JVPwQiPIz/image.png!thumbnail"},"29:1|30:0|3:."613px."|4:."145.575px."|7:1|crop:."."|frame:."none."|ori-height:."166."|ori-width:."699.""],[20,"說明:如果可以在一個頁中至少存放兩行數據,那么varchar類型的數據就不會存放到BLOB頁中;當長度超過8098后,就會將溢出的數據存放在BLOB頁中。.n"],[20,"varchar(N)中N指的是","27:."12.""],[20,"字符的長度","27:."12."|8:1"],[20,",而文檔說明中varchar類型最大支持","27:."12.""],[20,"65535單位是字","27:."12."|8:1"],[20,".n"],[20,"節且指的是所有varchar列的長度總和。","27:."12."|8:1"],[20,".ndynamic和compressed存放在BLOB中的數據采用的行溢出方式如圖:.n"],[20,{"gallery-block":"https://images-cdn.shimo.im/inEA6FCjrUIgZABG/image.png!thumbnail"},"29:1|30:0|3:."613px."|4:."145.587px."|7:1|crop:."."|frame:."none."|ori-height:."176."|ori-width:."741.""],[20,"說明:在數據頁中只存放20個字節的指針,實際的數據都存放在off page中.n行溢出總結:.n1.行記錄長度大約超過page一半時,依次將最長的列拆分發到多個page存儲,直到不再超過page的一半為止;"],[20,".n","text-indent:."1.""],[20,"2.溢出的列放在一個page中不夠的話,繼續放在新的page中"],[20,".n","text-indent:."1.""],[20,"3.compact格式下,溢出的列只存儲前768字節"],[20,".n","text-indent:."1.""],[20,"4.dynamic格式下,溢出的列只存儲前20字節(指針)"],[20,".n","text-indent:."1.""],[20,"5.select * 會同時讀取這些溢出的列,代價很高"],[20,".n","text-indent:."1.""],[20,"6.執行計劃中出現filesort或temporary table時,一般都無法放在內存中,需要變成disk tmp table,IO代價更高。"],[20,".n","text-indent:."1.""],[20,"dynamic","27:."12."|8:1"],[20,",將長字段完全off-page存儲"],[20,".n","text-indent:."1.""],[20,"compressed","27:."12."|8:1"],[20,"(存儲的行數據會以zlib算法進行壓縮)","27:."12.""],[20,"將data、index、pages進行壓縮,但buffer pool中的pages則不壓縮"],[20,".n","text-indent:."1.""],[20,"CHAR行結構存儲","8:1"],[20,".nchar(N)中N是指字符的長度,所以在不同的字符集下,char類型列內部存儲的可能不是定長的數據。"]]">

行記錄格式

可以通過show table status like 'table_name'命令查看當前表使用的行格式(row_format字段)

row_format

redundant,最早的行格式

首部是字段長度偏移列表,按照列的順序逆序放置,其長度為(若列的長度小于255字節,用1字節表示;若大于255個字節,用2字節表示)

記錄頭信息:占用6字節,含義如圖:

說明:n_fields值代表一行中列的數量,mysql一行中最多的列為1023;1byte_offs_flag:定義了偏移列表占用1字節還是2字節。

最后部分即為實際存儲的每個列的數據

注意:對于varchar類型的NULL值,不占用任何存儲空間,而char類型的NULL值需要占用空間


compact,5.0.3以后默認行格式

說明:

首部是一個非NULL變長字段長度列表,且按照列的順序逆序放置,其長度為(若列的長度小于255字節,用1字節表示;若大于255個字節,用2字節表示)

NULL標志位:該行數據是否有NULL值,有則用1表示,占用1個字節

記錄頭信息:固定占用5字節,含義如圖:

說明:通過record_type分析可得,在innodb存儲引擎中頁內部是通過一種鏈表的結構來串連各個行記錄的

最后的部分為實際存儲每個列的數據(注:1.不管是char類型還是varchar類型,NULL不占該部分任何空間,只占有NULL標志位;2.固定長度char字段在未能完全占用其長度空間時,會用Ox20來進行填充)

每行數據除了用戶定義的列外,還有兩個隱藏列(事務ID(DB_TRX_ID)6字節,回滾指針列(DB_ROLL_PTR),7字節),若沒有定義主鍵,還會增加一個rowid(DB_ROW_ID)6字節

Antelope文件格式包括compact和Redundant行記錄格式

Barracuda文件格式包括dynamic和compressed行記錄格式


行溢出數據

compact和redundant存放BLOB的行溢出數據存儲格式如圖:

說明:如果可以在一個頁中至少存放兩行數據,那么varchar類型的數據就不會存放到BLOB頁中;當長度超過8098后,就會將溢出的數據存放在BLOB頁中。

varchar(N)中N指的是字符的長度,而文檔說明中varchar類型最大支持65535單位是字節且指的是所有varchar列的長度總和。


dynamic和compressed存放在BLOB中的數據采用的行溢出方式如圖:

說明:在數據頁中只存放20個字節的指針,實際的數據都存放在off page中

行溢出總結:

    1.行記錄長度大約超過page一半時,依次將最長的列拆分發到多個page存儲,直到不再超過page的一半為止;

    2.溢出的列放在一個page中不夠的話,繼續放在新的page中

    3.compact格式下,溢出的列只存儲前768字節

    4.dynamic格式下,溢出的列只存儲前20字節(指針)

    5.select * 會同時讀取這些溢出的列,代價很高

    6.執行計劃中出現filesort或temporary table時,一般都無法放在內存中,需要變成disk tmp table,IO代價更高。

dynamic,將長字段完全off-page存儲

compressed(存儲的行數據會以zlib算法進行壓縮)將data、index、pages進行壓縮,但buffer pool中的pages則不壓縮

CHAR行結構存儲

char(N)中N是指字符的長度,所以在不同的字符集下,char類型列內部存儲的可能不是定長的數據。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泗水县| 临江市| 乌什县| 香格里拉县| 腾冲县| 额敏县| 微博| 贵德县| 视频| 东丰县| 菏泽市| 西安市| 兴宁市| 黑龙江省| 临邑县| 武山县| 景谷| 托里县| 漳浦县| 玛曲县| 宝坻区| 巴南区| 奇台县| 河北区| 含山县| 遂川县| 大渡口区| 五寨县| 拜泉县| 旅游| 西城区| 尉犁县| 祥云县| 深水埗区| 青铜峡市| 民权县| 镇坪县| 白玉县| 云南省| 太谷县| 永康市|