久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何提高InnoDB表BLOB列的存儲效率

177次閱讀
沒有評論

共計 15156 個字符,預計需要花費 38 分鐘才能閱讀完成。

如何提高 InnoDB 表 BLOB 列的存儲效率,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

0、導讀

強烈建議不要在 InnoDB 中存儲 TEXT/BLOB 大對象,迫不得已時,如何進行優化以提升效率?

首先,介紹下關于 InnoDB 引擎存儲格式的幾個要點:

1、InnoDB 可以選擇使用共享表空間或者是獨立表空間方式,建議使用獨立表空間,便于管理、維護。啟用 innodb_file_per_table 選項,5.5 以后可以在線動態修改生效,并且執行 ALTER TABLE xx ENGINE = InnoDB 將現有表轉成獨立表空間,早于 5.5 的版本,修改完這個選項后,需要重啟才能生效;

2、InnoDB 的 data page 默認 16KB,5.6 版本以后,新增選項 innodb_page_size 可以修改,在 5.6 以前的版本,只能修改源碼重新編譯,但并不推薦修改這個配置,除非你非常清楚它有什么優缺點;

3、InnoDB 的 data page 在有新數據寫入時,會預留 1 /16 的空間,預留出來的空間可用于后續的新紀錄寫入,減少頻繁的新增 data page 的開銷;

4、每個 data page,至少需要存儲 2 行記錄。因此理論上行記錄最大長度為 8KB,但事實上應該更小,因為還有一些 InnoDB 內部數據結構要存儲;

5、受限于 InnoDB 存儲方式,如果數據是順序寫入的話,最理想的情況下,data page 的填充率是 15/16,但一般沒辦法保證完全的順序寫入,因此,data page 的填充率一般是 1 / 2 到 15/16。因此每個 InnoDB 表都最好要有一個自增列作為主鍵,使得新紀錄寫入盡可能是順序的;

6、當 data page 填充率不足 1 / 2 時,InnoDB 會進行收縮,釋放空閑空間;

7、MySQL 5.6 版本的 InnoDB 引擎當前支持 COMPACT、REDUNDANT、DYNAMIC、COMPRESSED 四種格式,默認是 COMPACT 格式,COMPRESSED 用的很少且不推薦(見下一條),如果需要用到壓縮特性的話,可以直接考慮 TokuDB 引擎;

8、COMPACT 行格式相比 REDUNDANT,大概能節省 20% 的存儲空間,COMPRESSED 相比 COMPACT 大概能節省 50% 的存儲空間,但會導致 TPS 下降了 90%。因此強烈不推薦使用 COMPRESSED 行格式;

9、當行格式為 DYNAMIC 或 COMPRESSED 時,TEXT/BLOB 之類的長列(long column,也有可能是其他較長的列,不一定只有 TEXT/BLOB 類型,看具體情況)會完全存儲在一個獨立的 data page 里,聚集索引頁中只使用 20 字節的指針指向新的 page,這就是所謂的 off-page,類似 ORACLE 的行遷移,磁盤空間浪費較嚴重,且 I / O 性能也較差。因此,強烈不建議使用 BLOB、TEXT、超過 255 長度的 VARCHAR 列類型;

10、當 InnoDB 的文件格式(innodb_file_format)設置為 Antelope,并且行格式為 COMPACT 或 REDUNDANT 時,BLOB、TEXT 或者長 VARCHAR 列只會將其前 768 字節存儲在聚集索頁中(最大 768 字節的作用是便于創建前綴索引 /prefix index),其余更多的內容存儲在額外的 page 里,哪怕只是多了一個字節。因此,所有列長度越短越好;

11、在 off-page 中存儲的 BLOB、TEXT 或者長 VARCHAR 列的 page 是獨享的,不能共享。因此強烈不建議在一個表中使用多個長列。

綜上,如果在實際業務中,確實需要在 InnoDB 表中存儲 BLOB、TEXT、長 VARCHAR 列時,有下面幾點建議:

1、盡可能將所有數據序列化、壓縮之后,存儲在同一個列里,避免發生多次 off-page;

2、實際最大存儲長度低于 255 的列,轉成 VARCHAR 或者 CHAR 類型(如果是變長數據二者沒區別,如果是定長數據,則使用 CHAR 類型);

3、如果無法將所有列整合到一個列,可以退而求其次,根據每個列最大長度進行排列組合后拆分成多個子表,盡量是的每個子表的總行長度小于 8KB,減少發生 off-page 的頻率;

4、上述建議是在 data page 為默認的 16KB 前提下,如果修改成 8KB 或者其他大小,請自行根據上述理論進行測試,找到最合適的值;

5、字符型列長度小于 255 時,無論采用 CHAR 還是 VARCHAR 來存儲,或者把 VARCHAR 列長度定義為 255,都不會導致實際表空間增大;

6、一般在游戲領域會用到比較多的 BLOB 列類型,游戲界同行可以關注下。

下面是測試驗證過程,有耐心的同學可以慢慢看:

#
#  測試案例:InnoDB 中長列存儲效率
#  測試場景描述:#  在 InnoDB 表中存儲 64KB 的數據,對比各種不同存儲方式 #  每個表寫入 5000 行記錄,觀察最后表空間文件大小對比
#表 0:所有數據存儲在一個 BLOB 列中
CREATE TABLE `t_longcol_0` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`longcol` blob NOT NULL COMMENT  store all data in a blob column ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
#相應的數據寫入存儲過程:mysp_longcol_0_ins()
CREATE PROCEDURE `mysp_longcol_0_ins`( in cnt int )
begin
set @i = 1;
while @i   cnt do
insert into t_longcol_0(longcol) select repeat(a ,65535);
set @i = @i + 1;
end while;
#表 1:將 64KB 字節平均存儲在 9 個列中
CREATE TABLE `t_longcol_1` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`longcol1` blob NOT NULL COMMENT  store all data in 9 blob columns ,
`longcol2` blob NOT NULL,
`longcol3` blob NOT NULL,
`longcol4` blob NOT NULL,
`longcol5` blob NOT NULL,
`longcol6` blob NOT NULL,
`longcol7` blob NOT NULL,
`longcol8` blob NOT NULL,
`longcol9` blob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#相應的數據寫入存儲過程:mysp_longcol_1_ins()
CREATE PROCEDURE `mysp_longcol_1_ins`( in cnt int )
begin
set @i = 1;
while @i   cnt do
insert into t_longcol_1(longcol1,longcol2,longcol3,longcol4,longcol5,longcol6,longcol7,longcol8,longcol9) select
repeat(a ,7500),
repeat(a ,7500),
repeat(a ,7500),
repeat(a ,7500),
repeat(a ,7500),
repeat(a ,7500),
repeat(a ,7500),
repeat(a ,7500),
repeat(a ,5535);
set @i = @i + 1;
end while;
#表 2:將 64KB 數據離散存儲在多個 BLOB 列中
CREATE TABLE `t_longcol_2` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`longcol1` blob NOT NULL COMMENT  store 100 bytes data ,
`longcol2` blob NOT NULL COMMENT  store 100 bytes data ,
`longcol3` blob NOT NULL COMMENT  store 100 bytes data ,
`longcol4` blob NOT NULL COMMENT  store 100 bytes data ,
`longcol5` blob NOT NULL COMMENT  store 100 bytes data ,
`longcol6` blob NOT NULL COMMENT  store 255 bytes data ,
`longcol7` blob NOT NULL COMMENT  store 368 bytes data ,
`longcol8` blob NOT NULL COMMENT  store 496 bytes data ,
`longcol9` blob NOT NULL COMMENT  store 512 bytes data ,
`longcol10` blob NOT NULL COMMENT  store 640 bytes data ,
`longcol11` blob NOT NULL COMMENT  store 768 bytes data ,
`longcol12` blob NOT NULL COMMENT  store 912 bytes data ,
`longcol13` blob NOT NULL COMMENT  store 1024 bytes data ,
`longcol14` blob NOT NULL COMMENT  store 2048 bytes data ,
`longcol15` blob NOT NULL COMMENT  store 3082 bytes data ,
`longcol16` blob NOT NULL COMMENT  store 4096 bytes data ,
`longcol17` blob NOT NULL COMMENT  store 8192 bytes data ,
`longcol18` blob NOT NULL COMMENT  store 16284 bytes data ,
`longcol19` blob NOT NULL COMMENT  store 20380 bytes data ,
`longcol20` blob NOT NULL COMMENT  store 5977 bytes data ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#相應的數據寫入存儲過程:mysp_longcol_1_ins()
CREATE PROCEDURE `mysp_longcol_1_ins`( in cnt int )
begin
set @i = 1;
while @i   cnt do
insert into t_longcol_2(longcol1,longcol2,longcol3,longcol4,longcol5,longcol6,longcol7,longcol8,longcol9,longcol10,
longcol11,longcol12,longcol13,longcol14,longcol15,longcol16,longcol17,longcol18,longcol19,longcol20) select
repeat(a ,100),
repeat(a ,100),
repeat(a ,100),
repeat(a ,100),
repeat(a ,100),
repeat(a ,256),
repeat(a ,368),
repeat(a ,496),
repeat(a ,512),
repeat(a ,640),
repeat(a ,768),
repeat(a ,912),
repeat(a ,1024),
repeat(a ,2048),
repeat(a ,3082),
repeat(a ,4096),
repeat(a ,8192),
repeat(a ,16284),
repeat(a ,20380),
repeat(a ,5977);
set @i = @i + 1;
end while;
#表 3:將 64KB 數據離散存儲在多個 CHAR、VARCHAR、BLOB 列中
CREATE TABLE `t_longcol_3` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`longcol1` char(100) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol2` char(100) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol3` char(100) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol4` char(100) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol5` char(100) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol6` varchar(256) NOT NULL DEFAULT   COMMENT  store 255 bytes data ,
`longcol7` varchar(368) NOT NULL DEFAULT   COMMENT  store 368 bytes data ,
`longcol8` varchar(496) NOT NULL DEFAULT   COMMENT  store 496 bytes data ,
`longcol9` varchar(512) NOT NULL DEFAULT   COMMENT  store 512 bytes data ,
`longcol10` varchar(640) NOT NULL DEFAULT   COMMENT  store 640 bytes data ,
`longcol11` varchar(768) NOT NULL DEFAULT   COMMENT  store 768 bytes data ,
`longcol12` varchar(912) NOT NULL DEFAULT   COMMENT  store 912 bytes data ,
`longcol13` varchar(1024) NOT NULL DEFAULT   COMMENT  store 1024 bytes data ,
`longcol14` varchar(2048) NOT NULL DEFAULT   COMMENT  store 2048 bytes data ,
`longcol15` varchar(3082) NOT NULL DEFAULT   COMMENT  store 3082 bytes data ,
`longcol16` varchar(4096) NOT NULL DEFAULT   COMMENT  store 4096 bytes data ,
`longcol17` blob NOT NULL COMMENT  store 8192 bytes data ,
`longcol18` blob NOT NULL COMMENT  store 16284 bytes data ,
`longcol19` blob NOT NULL COMMENT  store 20380 bytes data ,
`longcol20` varchar(5977) NOT NULL DEFAULT   COMMENT  store 5977 bytes data ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#相應的數據寫入存儲過程:mysp_longcol_3_ins()
CREATE PROCEDURE `mysp_longcol_1_ins`( in cnt int )
begin
set @i = 1;
while @i   cnt do
insert into t_longcol_3(longcol1,longcol2,longcol3,longcol4,longcol5,longcol6,longcol7,longcol8,longcol9,longcol10,
longcol11,longcol12,longcol13,longcol14,longcol15,longcol16,longcol17,longcol18,longcol19,longcol20) select
repeat(a ,100),
repeat(a ,100),
repeat(a ,100),
repeat(a ,100),
repeat(a ,100),
repeat(a ,256),
repeat(a ,368),
repeat(a ,496),
repeat(a ,512),
repeat(a ,640),
repeat(a ,768),
repeat(a ,912),
repeat(a ,1024),
repeat(a ,2048),
repeat(a ,3082),
repeat(a ,4096),
repeat(a ,8192),
repeat(a ,16284),
repeat(a ,20380),
repeat(a ,5977);
set @i = @i + 1;
end while;
#表 4:將 64KB 數據離散存儲在多個 VARCHAR、BLOB 列中,對比 t_longcol_3 中幾個列是 CHAR 的情況
CREATE TABLE `t_longcol_4` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`longcol1` varchar(100) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol2` varchar(100) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol3` varchar(100) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol4` varchar(100) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol5` varchar(100) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol6` varchar(256) NOT NULL DEFAULT   COMMENT  store 255 bytes data ,
`longcol7` varchar(368) NOT NULL DEFAULT   COMMENT  store 368 bytes data ,
`longcol8` varchar(496) NOT NULL DEFAULT   COMMENT  store 496 bytes data ,
`longcol9` varchar(512) NOT NULL DEFAULT   COMMENT  store 512 bytes data ,
`longcol10` varchar(640) NOT NULL DEFAULT   COMMENT  store 640 bytes data ,
`longcol11` varchar(768) NOT NULL DEFAULT   COMMENT  store 768 bytes data ,
`longcol12` varchar(912) NOT NULL DEFAULT   COMMENT  store 912 bytes data ,
`longcol13` varchar(1024) NOT NULL DEFAULT   COMMENT  store 1024 bytes data ,
`longcol14` varchar(2048) NOT NULL DEFAULT   COMMENT  store 2048 bytes data ,
`longcol15` varchar(3082) NOT NULL DEFAULT   COMMENT  store 3082 bytes data ,
`longcol16` varchar(4096) NOT NULL DEFAULT   COMMENT  store 4096 bytes data ,
`longcol17` blob NOT NULL COMMENT  store 8192 bytes data ,
`longcol18` blob NOT NULL COMMENT  store 16284 bytes data ,
`longcol19` blob NOT NULL COMMENT  store 20380 bytes data ,
`longcol20` varchar(5977) NOT NULL DEFAULT   COMMENT  store 5977 bytes data ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#相應的數據寫入存儲過程:mysp_longcol_4_ins()
CREATE PROCEDURE `mysp_longcol_1_ins`( in cnt int )
begin
set @i = 1;
while @i   cnt do
insert into t_longcol_4(longcol1,longcol2,longcol3,longcol4,longcol5,longcol6,longcol7,longcol8,longcol9,longcol10,
longcol11,longcol12,longcol13,longcol14,longcol15,longcol16,longcol17,longcol18,longcol19,longcol20) select
repeat(a ,100),
repeat(a ,100),
repeat(a ,100),
repeat(a ,100),
repeat(a ,100),
repeat(a ,256),
repeat(a ,368),
repeat(a ,496),
repeat(a ,512),
repeat(a ,640),
repeat(a ,768),
repeat(a ,912),
repeat(a ,1024),
repeat(a ,2048),
repeat(a ,3082),
repeat(a ,4096),
repeat(a ,8192),
repeat(a ,16284),
repeat(a ,20380),
repeat(a ,5977);
set @i = @i + 1;
end while;
#表 5:將 64KB 數據離散存儲在多個 VARCHAR、BLOB 列中,和 t_longcol_4 相比,變化在于前面的幾個列長度改成了 255,但實際存儲長度還是 100 字節
CREATE TABLE `t_longcol_5` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`longcol1` varchar(255) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol2` varchar(255) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol3` varchar(255) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol4` varchar(255) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol5` varchar(255) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol6` varchar(256) NOT NULL DEFAULT   COMMENT  store 255 bytes data ,
`longcol7` varchar(368) NOT NULL DEFAULT   COMMENT  store 368 bytes data ,
`longcol8` varchar(496) NOT NULL DEFAULT   COMMENT  store 496 bytes data ,
`longcol9` varchar(512) NOT NULL DEFAULT   COMMENT  store 512 bytes data ,
`longcol10` varchar(640) NOT NULL DEFAULT   COMMENT  store 640 bytes data ,
`longcol11` varchar(768) NOT NULL DEFAULT   COMMENT  store 768 bytes data ,
`longcol12` varchar(912) NOT NULL DEFAULT   COMMENT  store 912 bytes data ,
`longcol13` varchar(1024) NOT NULL DEFAULT   COMMENT  store 1024 bytes data ,
`longcol14` varchar(2048) NOT NULL DEFAULT   COMMENT  store 2048 bytes data ,
`longcol15` varchar(3082) NOT NULL DEFAULT   COMMENT  store 3082 bytes data ,
`longcol16` varchar(4096) NOT NULL DEFAULT   COMMENT  store 4096 bytes data ,
`longcol17` blob NOT NULL COMMENT  store 8192 bytes data ,
`longcol18` blob NOT NULL COMMENT  store 16284 bytes data ,
`longcol19` blob NOT NULL COMMENT  store 20380 bytes data ,
`longcol20` varchar(5977) NOT NULL DEFAULT   COMMENT  store 5977 bytes data ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#相應的數據寫入存儲過程:mysp_longcol_5_ins()
CREATE PROCEDURE `mysp_longcol_1_ins`( in cnt int )
begin
set @i = 1;
while @i   cnt do
insert into t_longcol_5(longcol1,longcol2,longcol3,longcol4,longcol5,longcol6,longcol7,longcol8,longcol9,longcol10,
longcol11,longcol12,longcol13,longcol14,longcol15,longcol16,longcol17,longcol18,longcol19,longcol20) select
repeat(a ,100),
repeat(a ,100),
repeat(a ,100),
repeat(a ,100),
repeat(a ,100),
repeat(a ,256),
repeat(a ,368),
repeat(a ,496),
repeat(a ,512),
repeat(a ,640),
repeat(a ,768),
repeat(a ,912),
repeat(a ,1024),
repeat(a ,2048),
repeat(a ,3082),
repeat(a ,4096),
repeat(a ,8192),
repeat(a ,16284),
repeat(a ,20380),
repeat(a ,5977);
set @i = @i + 1;
end while;
#從下面開始,參考第 3 條建議進行分表,每個表所有列長度總和
#分表 1,行最大長度  100 + 100 + 100 + 100 + 100 + 255 + 368 + 496 + 512 + 640 + 768 + 912 + 3082 = 7533  字節
CREATE TABLE `t_longcol_51` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`longcol1` varchar(255) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol2` varchar(255) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol3` varchar(255) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol4` varchar(255) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol5` varchar(255) NOT NULL DEFAULT   COMMENT  store 100 bytes data ,
`longcol6` varchar(256) NOT NULL DEFAULT   COMMENT  store 255 bytes data ,
`longcol7` varchar(368) NOT NULL DEFAULT   COMMENT  store 368 bytes data ,
`longcol8` varchar(496) NOT NULL DEFAULT   COMMENT  store 496 bytes data ,
`longcol9` varchar(512) NOT NULL DEFAULT   COMMENT  store 512 bytes data ,
`longcol10` varchar(640) NOT NULL DEFAULT   COMMENT  store 640 bytes data ,
`longcol11` varchar(768) NOT NULL DEFAULT   COMMENT  store 768 bytes data ,
`longcol12` varchar(912) NOT NULL DEFAULT   COMMENT  store 912 bytes data ,
`longcol15` varchar(3082) NOT NULL DEFAULT   COMMENT  store 3082 bytes data ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#分表 2,行最大長度  1024 + 2048 + 4096 = 7168  字節
CREATE TABLE `t_longcol_52` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`longcol13` varchar(1024) NOT NULL DEFAULT   COMMENT  store 1024 bytes data ,
`longcol14` varchar(2048) NOT NULL DEFAULT   COMMENT  store 2048 bytes data ,
`longcol16` varchar(4096) NOT NULL DEFAULT   COMMENT  store 4096 bytes data ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#分表 3,行最大長度  8192  字節
CREATE TABLE `t_longcol_53` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`longcol17` blob NOT NULL COMMENT  store 8192 bytes data ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#分表 4,行最大長度  16284 + 20380 = 36664  字節
CREATE TABLE `t_longcol_54` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`longcol18` blob NOT NULL COMMENT  store 16284 bytes data ,
`longcol19` blob NOT NULL COMMENT  store 20380 bytes data ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#分表 5,行最大長度  5977 + 4 = 5981  字節
CREATE TABLE `t_longcol_55` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`longcol20` varchar(5977) NOT NULL DEFAULT   COMMENT  store 5977 bytes data ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#相應的數據寫入存儲過程:mysp_longcol_51_ins()
CREATE PROCEDURE `mysp_longcol_51_ins`( in cnt int )
begin
set @i = 1;
while @i   cnt do
insert into t_longcol_51(longcol1,longcol2,longcol3,longcol4,longcol5,longcol6,longcol7,longcol8,longcol9,longcol10,
longcol11,longcol12,longcol15) select
repeat(a ,100),
repeat(a ,100),
repeat(a ,100),
repeat(a ,100),
repeat(a ,100),
repeat(a ,256),
repeat(a ,368),
repeat(a ,496),
repeat(a ,512),
repeat(a ,640),
repeat(a ,768),
repeat(a ,912),
repeat(a ,3082);
insert into t_longcol_52(longcol13,longcol14,longcol16) select
repeat(a ,1024),
repeat(a ,2048),
repeat(a ,4096);
insert into t_longcol_53(longcol17) select repeat(a ,8192);
insert into t_longcol_54(longcol18,longcol19) select
repeat(a ,16284),
repeat(a ,20380);
insert into t_longcol_55(longcol20) select repeat(a ,5977);
set @i = @i + 1;
end while;
end;

上述各個測試表都寫入 5000 行記錄后,再來對比下其表空間文件大小,以及重整表空間后的大小,觀察碎片率。詳細對比見下:

最后一種分表方式中,5 個子表的表空間文件大小總和是 40960 + 40960 + 98304 + 286720 + 40960 = 507904 字節。
可以看到,這種方式的總大小和原始表大小差距最小,其他幾種存儲方式都比這個來的大。

看完上述內容,你們掌握如何提高 InnoDB 表 BLOB 列的存儲效率的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-19發表,共計15156字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 彭州市| 聂荣县| 来安县| 留坝县| 衡阳市| 昌吉市| 房产| 时尚| 桦川县| 和政县| 文水县| 涿鹿县| 彩票| 忻城县| 兴业县| 盐山县| 疏勒县| 武冈市| 文昌市| 海宁市| 清水河县| 米泉市| 铜梁县| 通化市| 桃园县| 宜章县| 普兰县| 公主岭市| 华蓥市| 瓦房店市| 临沭县| 册亨县| 襄汾县| 胶南市| 庄浪县| 长岭县| 武川县| 贵德县| 安达市| 宣恩县| 巨野县|