MYSQL OPTIMIZE命令

什么是独立表空间和共享表空间?它们的区别是什么?

共享表空间:指的是数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在 data 目录下。 独立表空间:每一个表都将会生成以独立的文件方式来进行存储。 共享表空间和独立表空间最大的区别是如果把表放再共享表空间,即使表删除了空间也不会删除,所以表依然很大,而独立表空间如果删除表就会清除空间

OPTIMIZE使用场景

当对MySQL进行大量的增删改操作的时候,很容易产生一些碎片,这些碎片占据着空间,所以可能会出现删除很多数据后,数据文件大小变化不大的现象。当然新插入的数据仍然会利用这些碎片。但过多的碎片,对数据的插入操作是有一定影响的,此时,我们可以通过optimize来对表的优化。

针对MySQL的不同数据库存储引擎,在optimize使用清除碎片,回收闲置的数据库空间,把分散存储(fragmented)的数据和索引重新挪到一起(defragmentation),对I/O速度有好处。
当然optimize在对表进行操作的时候,会加锁,所以不宜经常在程序中调用。

实际操作

1.使用命令show table status [like table_name]来查看数据碎片

!data_free选项代表数据碎片。

2.InnoDB存储引擎
InnoDB引擎的表分为独享表空间和同享表空间的表,我们可以通过show variables like ‘innodb_file_per_table’;来查看是否开启独享表空间。我本地是开启了独享表空间的。此时是无法对表进行optimize操作的,如果操作,会返回如图信息,最后的一条Table does not support optimize, doing recreate + analyze instead。
因为当表删除或者truncate,空间可以被OS回收。

3.MyISAM存储引擎
针对MyISAM表,直接使用如下命令进行优化
optimize table table1[,table2][,table3]。如果同时优化多个表可以使用逗号分隔。可以看出,优化后data_free值为0。

如何进行表空间收缩?

使用重建表的方式可以收缩表空间,重建表有以下三种方式:
alter table t engine=InnoDB
optmize table t
truncate table t

重建表的过程

1.建立一个临时文件,扫描表 t 主键的所有数据页;
2.用数据页中表 t 的记录生成 B+ 树,存储到临时文件中;
3.生成临时文件的过程中,将所有对 t 的操作记录在一个日志文件(row log)中;
4.临时文件生成后,将日志文件中的操作应用到临时文件,得到一个逻辑数据上与表 t相同的数据文件;
5.用临时文件替换表 t 的数据文件。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值