&nbs
創(chuàng)新互聯(lián)公司是一家專業(yè)提供
梅列企業(yè)網(wǎng)站建設(shè),專注與
網(wǎng)站制作、做網(wǎng)站、
H5場景定制、小程序制作等業(yè)務(wù)。10年已為梅列眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進(jìn)行中。p; 首先說下MySQL數(shù)據(jù)庫的varchar字段,真的很實用,它可以存放65536字節(jié)的數(shù)據(jù),比oracle和sqlserver大多了,但是在使用varchar時也有幾點要注意;
1、65536只是這么說,要建表的時候指定一個字段65536仍然會報錯,因為字段本身還有其他開銷,實際只能存放65532字節(jié)。
2、65532字節(jié)并不是每個varchar字段都可以設(shè)置的,他是一個總和,也就是說如果有2個varchar字段的表,那么每個varchar字段只能設(shè)置65532/2的值。
3、建表時要注意編碼格式哦,varchar(65532)代表的是字節(jié)數(shù),如果使用GBK或者UTF-8那就無法建立成功了,因為GBK一個字符占用2字節(jié),UTF-8一個字符占用3字節(jié)
以上概念比較簡單,大家建個表試驗一下就好,這里不再做實驗;大家知道,頁(PAGE)是innoDB存儲引擎的最小存儲單位,默認(rèn)大小為16KB,及16384字節(jié),行數(shù)據(jù)存儲在頁中;那么一行數(shù)據(jù)如果超過了一個頁能夠存儲的大小怎么辦?比如上面說的varchar(65532),65532字節(jié)該如何存儲?這個時候就會發(fā)生行溢出。
行溢出:
InnoDB存儲引擎可以將一條記錄中的某些數(shù)據(jù)存儲在真正的數(shù)據(jù)頁面之外,一般為BLOB\LOB這類的大對象列類型。但是也不是絕對,BLOB可以不將數(shù)據(jù)放在溢出頁面,而且即便是VARCHAR列數(shù)據(jù)類型,依然有可能被存放為行溢出數(shù)據(jù),比如上例
我們執(zhí)行:insert into 表名 select repeat('a',65532),就將一行65532字節(jié)的數(shù)據(jù)插入到表中了,實際上在底層,真正的數(shù)據(jù)頁只存儲了一小部分?jǐn)?shù)據(jù),之后是偏移量,指向行溢出數(shù)據(jù),這時會產(chǎn)生N個未壓縮的二進(jìn)制大對象頁 Uncompressed BLOB Page,這些大對象頁中才是完整存放了65532字節(jié)的數(shù)據(jù)。
那么,一行數(shù)據(jù)為多大時,會發(fā)生行溢出呢?我們知道InnoDB存儲引擎表是索引組織的,即B+樹結(jié)構(gòu),這樣一個頁中至少要保證有2條數(shù)據(jù),否則就變成鏈表了,如果只能存放一條數(shù)據(jù),那么InnoDB存儲引擎會自動將它存放在溢出頁中。如果可以在一個頁中至少放入兩行數(shù)據(jù),那么就不會發(fā)生行溢出
其實對于BLOB類型的數(shù)據(jù),跟varchar也是一個道理,要看實際的大小,當(dāng)然,用戶既然使用了blob列類型,一般不可能存放長度過小的數(shù)據(jù),因此在大多數(shù)情況下BLOB的行數(shù)據(jù)還是會發(fā)生行溢出,實際數(shù)據(jù)保存在BLOB頁中,數(shù)據(jù)頁只保存數(shù)據(jù)的前768字節(jié)。
文章標(biāo)題:【MYSQL】InnoDB行溢出數(shù)據(jù)說明-創(chuàng)新互聯(lián)
新聞來源:http://www.rwnh.cn/article38/ccigsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、響應(yīng)式網(wǎng)站、網(wǎng)頁設(shè)計公司、關(guān)鍵詞優(yōu)化、網(wǎng)站營銷、電子商務(wù)
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源:
創(chuàng)新互聯(lián)