友谊地久天长英文版MySQL优化篇——碎⽚整理(optimizetable、altertableengine。。。
删除⼀张表⾥的很多数据后,但是表的数据⽂件和索引⽂件都没有变⼩。
decent是什么意思因为删除数据(尤其text、blob)时,留下很多数据空洞,空洞占据原来的数据空间,这些空洞在后续插⼊操作可能会被再次利⽤,没⽤上的话也会⼀直存在,增加了额外存储
成本,数据碎⽚化也导致表扫描变慢。
⼀般不需要特意整理碎⽚,或者执⾏也只是⼀周/⼀⽉执⾏对特定表执⾏⼀次即可。
对InnoDB、MyISAM有⽤。
⽽BDB,⽬前被映射到analyze table。
对于InnoDB,映射到alter table,会重建表,更新索引统计数据,释放聚簇索引中未使⽤空间。
运⾏过程会锁表。
talentsMyISAM:直接使⽤
optimize table tb_ur;
god is girl
InnoDB:⽤上⾯命令会提⽰
英语单词墙
“Table does not support optimize, doing recreate + analyze instead”
简单学习
意思就是InnoDB不⽀持optimize。
解决⽅法有两种,⼀个是:
2012湖北高考英语
alter table tb_ur engine=‘InnoDB’;上海少儿英语培训哪个好
其实就是新建⼀张表,把旧数据拷贝过去,虽然过程安全,但还是建议先做个备份。
或者是在MySQL启动时加参数 “ --skip-new ” 或者是 “ --safe-mode ”来⽀持optimize。
命令:
optimize[local| no_write_to_binlog]table tbName1 [, tbName2]...
也就是说可以⼀次对多张表进⾏整理。
local、no_write_to_binlog:⼀般情况optimize会被记录到⼆进制⽇志⾥,指定了它们任意⼀个,都不会被记录。
⽰例
ang我向⼀张表中插⼊100W条数据,然后再执⾏alter table XXX engine='InnoDB’操作,再次查看表情况(show table status;),这⾥我把两次返回结果合并到⼀张表⾥:
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time
w_form InnoDB10Dynamic99249512412337152000419430410000012021-12-17
10:16:55
2021-12-17
11:17:11
w_form InnoDB10Dynamic98917215315168307200314572810000012021-12-17 11:23:11
也可以直接到服务器上执⾏命令,查看相应表的.frm和.ibd⽂件⼤⼩是否变⼩了。
electric shock