MySQL的物理存儲結(jié)構(gòu)
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:主機域名、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、立山網(wǎng)站維護、網(wǎng)站推廣。
(1).數(shù)據(jù)的組織形式--索引
(2).數(shù)據(jù)的row存儲
變長字段的存儲:
可變長度列在評估字段大小時還要考慮存儲列實際長度的字節(jié)數(shù)。例如,VARCHAR(255)CHARACTER SET UTF8列需要額外的兩個字節(jié)來存儲值長度信息,所以該列需要多達767個字節(jié)存儲,其實最大可以存儲65533字節(jié),剩余兩個字節(jié)存儲長度信息。
行溢出的處理:
數(shù)據(jù)表Row_format是Compact, innodb默認的approach存儲格式會把每個blob字段的前864個字節(jié)存儲在page里,所以blob超過一定數(shù)量的話,單行大小就會超過8k ,所以就報錯了。通過對比業(yè)務(wù)寫成功和失敗的SQL也應(yīng)征了這個推論,那么現(xiàn)在要怎么解決這個問題?
由于業(yè)務(wù)單表的存儲條數(shù)并不大,而且業(yè)務(wù)邏輯不適合拆分,所以我們要在Row_format上來解決這個問題。
如果blob列值長度 <= 768 bytes,不會發(fā)生行溢出(page overflow),內(nèi)容都在數(shù)據(jù)頁(B-tree Node);如果列值長度 > 768字節(jié),那么前768字節(jié)依然在數(shù)據(jù)頁,而剩余的則放在溢出頁(off-page)
所以,此種格式的唯一值索引長度不能超過767
Barracuda
Barracuda文件格式下?lián)碛袃煞N新的行記錄格式Compressed和Dynamic兩種,新的兩種格式對于存放BLOB的數(shù)據(jù)采用了完全的行溢出的方式,在數(shù)據(jù)頁中只存放20個字節(jié)的指針,實際的數(shù)據(jù)都存放在BLOB Page中。Compressed行記錄格式的另一個功能就是存儲在其中的數(shù)據(jù)會以zlib的算法進行壓縮。
dynamic行格式,列存儲是否放到off-page頁,主要取決于行大小,它會把行中最長的那一列放到off-page,直到數(shù)據(jù)頁能存放下兩行。TEXT/BLOB列 <=40 bytes 時總是存放于數(shù)據(jù)頁。可以避免compact那樣把太多的大列值放到 B-tree Node,因為dynamic格式認為,只要大列值有部分數(shù)據(jù)放在off-page,那把整個值放入都放入off-page更有效。
在InnoDB中,變長列(
variable-length column
)可能是以下幾種情況
長度不固定
的數(shù)據(jù)類型,例如
VARCHAR
、
VARBINARY
、
BLOB
、
TEXT
等
長度固定
的數(shù)據(jù)類型,如
CHAR
,如果
實際存儲
占用的空間
大于768Byte
,InnoDB會將其視為變長列
變長編碼
下的
CHAR
NULL值標(biāo)識位
指示了該行數(shù)據(jù)列中是否有NULL值,這個字段的長度和表的列數(shù)有關(guān),每一列對應(yīng)一個bit位
2. session的執(zhí)行過程
當(dāng)前文章:MySQL的物理存儲結(jié)構(gòu)和session生命周期
本文來源:http://chinadenli.net/article40/gogjho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、服務(wù)器托管、電子商務(wù)、微信小程序、云服務(wù)器、外貿(mào)建站
聲明:本網(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)