91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

【MYSQL】InnoDB行溢出數據說明

發布時間:2020-08-11 21:20:11 來源:ITPUB博客 閱讀:289 作者:ai3707 欄目:MySQL數據庫
    首先說下MySQL數據庫的varchar字段,真的很實用,它可以存放65536字節的數據,比oracle和sqlserver大多了,但是在使用varchar時也有幾點要注意;

    1、65536只是這么說,要建表的時候指定一個字段65536仍然會報錯,因為字段本身還有其他開銷,實際只能存放65532字節。
    2、65532字節并不是每個varchar字段都可以設置的,他是一個總和,也就是說如果有2個varchar字段的表,那么每個varchar字段只能設置65532/2的值。
    3、建表時要注意編碼格式哦,varchar(65532)代表的是字節數,如果使用GBK或者UTF-8那就無法建立成功了,因為GBK一個字符占用2字節,UTF-8一個字符占用3字節
    以上概念比較簡單,大家建個表試驗一下就好,這里不再做實驗;大家知道,頁(PAGE)innoDB存儲引擎的最小存儲單位,默認大小為16KB,及16384字節,行數據存儲在頁中;那么一行數據如果超過了一個頁能夠存儲的大小怎么辦?比如上面說的varchar(65532),65532字節該如何存儲?這個時候就會發生行溢出。

行溢出
    InnoDB存儲引擎可以將一條記錄中的某些數據存儲在真正的數據頁面之外,一般為BLOB\LOB這類的大對象列類型。但是也不是絕對,BLOB可以不將數據放在溢出頁面,而且即便是VARCHAR列數據類型,依然有可能被存放為行溢出數據,比如上例

    我們執行:insert into 表名 select repeat('a',65532),就將一行65532字節的數據插入到表中了,實際上在底層,真正的數據頁只存儲了一小部分數據,之后是偏移量,指向行溢出數據,這時會產生N個未壓縮的二進制大對象頁 Uncompressed BLOB Page,這些大對象頁中才是完整存放了65532字節的數據。

    那么,一行數據為多大時,會發生行溢出呢?我們知道InnoDB存儲引擎表是索引組織的,即B+樹結構,這樣一個頁中至少要保證有2條數據,否則就變成鏈表了,如果只能存放一條數據,那么InnoDB存儲引擎會自動將它存放在溢出頁中。如果可以在一個頁中至少放入兩行數據,那么就不會發生行溢出
    
    其實對于BLOB類型的數據,跟varchar也是一個道理,要看實際的大小,當然,用戶既然使用了blob列類型,一般不可能存放長度過小的數據,因此在大多數情況下BLOB的行數據還是會發生行溢出,實際數據保存在BLOB頁中,數據頁只保存數據的前768字節。


向AI問一下細節

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

AI

永年县| 唐海县| 明水县| 曲阜市| 石首市| 鸡东县| 呈贡县| 砀山县| 白朗县| 临安市| 彝良县| 延边| 蚌埠市| 县级市| 莒南县| 贵南县| 进贤县| 涪陵区| 苍溪县| 岳池县| 丰顺县| 宜川县| 鲁甸县| 孝感市| 高青县| 龙南县| 深州市| 会理县| 济南市| 石柱| 德庆县| 金华市| 潼关县| 那坡县| 灌南县| 额济纳旗| 黄大仙区| 万年县| 富平县| 镇宁| 上饶县|